SQL优化介绍

10 篇文章 0 订阅
2 篇文章 0 订阅

sql调优
一、sql调优原则
减少数据访问: 设置合理的字段类型,启用压缩,通过索引访问等减少磁盘IO
返回更少的数据: 只返回需要的字段和数据分页处理 减少磁盘io及网络io
减少交互次数: 批量DML操作,函数存储等减少数据连接次数
减少服务器CPU开销: 尽量减少数据库排序操作以及全表查询,减少cpu 内存占用
利用更多资源: 使用表分区,可以增加并行操作,更大限度利用cpu资源
总结到SQL优化中,就三点:
最大化利用索引;
尽可能避免全表扫描;
减少无效数据的查询;

二、以mysql调优为例,
先介绍mysql的底层引擎
mysql底层引擎分为两种,MyISAM 引擎和Innodb (默认)
定义:
InnoDB:MySQL默认的事务型引擎,也是最重要和使用最广泛的存储引擎。它被设计成为大量的短期事务,短期事务大部分情况下是正常提交的,很少被回滚。InnoDB的性能与自动崩溃恢复的特性,使得它在非事务存储需求中也很流行。除非有非常特别的原因需要使用其他的存储引擎,否则应该优先考虑InnoDB引擎。

MyISAM:在MySQL 5.1 及之前的版本,MyISAM是默认引擎。MyISAM提供的大量的特性,包括全文索引、压缩、空间函数(GIS)等,但MyISAM并不支持事务以及行级锁,而且一个毫无疑问的缺陷是崩溃后无法安全恢复。
InnoDB 支持事务,支持行级锁,必须要有主键,支持外键,聚集索引(数据文件和索引是放在一起的)

MyISAM 不支持事务,支持表锁,可以没有,不支持外键,,非聚集索引(数据和索引是分开的,索引保存的是数据的存储地址)

总结:在遇到大并发量的时候使用InnoDB,在更新数据比较少,查找比较多的时候使用MyISAM。
三、sql执行顺序
1、from 子句组装来自不同数据源的数据;
2、where 子句基于指定的条件对记录行进行筛选;
3、group by 子句将数据划分为多个分组;
4、使用聚集函数进行计算;
5、使用 having 子句筛选分组;
6、计算所有的表达式;
7、select 的字段;
8、使用 order by 对结果集进行排序。

四、索引失效的几种情况
在这里插入图片描述

五、执行计划explain的使用
使用方法,在 select 语句前加上 explain 就可以了:
EXPLAIN 列的解释:
table:显示这一行的数据是关于哪张表的。
type:这是重要的列,显示连接使用了何种类型。从最好到最差的连接类型为 const、eq_reg、ref、range、index 和 ALL。
possible_keys:显示可能应用在这张表中的索引。如果为空,没有可能的索引。可以为相关的域从 WHERE 语句中选择一个合适的语句。
key: 实际使用的索引。如果为 NULL,则没有使用索引。很少的情况下,MYSQL 会选择优化不足的索引。这种情况下,可以在 SELECT 语句中使用 USE INDEX(indexname)来强制使用一个索引或者用 IGNORE INDEX(indexname)来强制 MYSQL 忽略索引。
key_len:使用的索引的长度。在不损失精确性的情况下,长度越短越好。
ref:显示索引的哪一列被使用了,如果可能的话,是一个常数。
rows:MySQL 认为必须检查的用来返回请求数据的行数
Extra:关于MYSQL如何解析查询的额外信息

  • 3
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值