如何进行Mysql优化?(sql优化层面和服务器优化层面)

  1. 尽量避免使用select *
  2. 规范sql语句大小写,sql是有缓存的,避免每次都要解析
  3. 使用exists代替in,更高效
  4. Mysql sql解析执行过程从右至左,基于这个规则,from后面能过滤掉更多数据的基础表放后面,where后面能过滤掉更多数据的查询条件放后面
  5. 查询条件中用相同类型去查询,避免类型转换
  6. 使用explain命令进行sql慢查询排查
  7. 合理使用索引
  • 为合适的列添加索引(主键、唯一索引、组合索引)
  • 尽量建立联合索引,也省空间成本
  • 尽量使用覆盖索引
  • 避免以下会使索引失效的操作索引列有null值不走索引(不一定)
  • 使用is null或is not null不走索引
  • 使用负向查询not、not in、not like、<>、!=、!>、!<不会使用索引
  • like将%放左边不走索引
  • 查询条件的数据类型做了隐式转换
  • 是用in或union代替or,or两侧有非索引就不会走索引
  • 尽量保持索引列干净,不在索引列上使用函数转换、运算
  • 建立联合索引要遵循最左匹配原则。
  • 使用比较运算或between会使联合索引从使用比较运算的下一个索引出断开

使用explain命令进行sql慢查询排查

id:select查询的序列号,包含一组数字,表示查询中执行select子句或操作表的顺序,id相同,执行顺序从上至下,id值越大,优先级越高,越先执行

select_type:查询类型SIMPLE、PRIMARY、SUBQUERY、DERIVED、UNION、UNION RESULT

table:正在访问的表

partitions:匹配的分区

type:访问的类型,效率从快到慢

null>system>const>eq_ref>ref>ref_or_null>index_merge>range>index>all

possible_keys:显示可能应用在这张表中的索引,一个或多个,但不一定实际使用到

key:实际使用到的索引,如果为null,则没有使用索引

key_len:表示索引中使用的字节数,可通过列计算出查询中使用的索引的长度

ref:显示索引的那一列被使用了,如果可能的话,是一个常数,哪些列或常量被用于查询索引列上的值

rows:根据表统计信息及索引选用情况,大致估算出找到所需的记录所需读取的行数,这个数量越小越好

filtered:查询的表行占表的百分比

extra:包含不适合在其他列中显示但十分重要的额外信息

  • 8
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值