Mysql索引优化
2. MySQL索引优化
2.1. Explain执行计划分析
2.2. 索引命中策略略分析
2.3. 索引分析总结
2.4. 数据库出现问题后如何死⽽而不不僵
// 数据库卡顿情景
解决思路
SQL及索引:⾼质量的SQL,避免索引失效
数据库表结构:范式,⾄至少要符合3NF
系统配置MySQL,Linux
硬件
1 通过explain 执行计划 调优sql及索引使用情况
explain select * from employee where age=40 and name='张⻜'
explain作用:
查看表的读取顺序
读取操作类型
哪些索引可⽤用
表之间关联
每张表有哪些索引被优化器器执行
索引:最左匹配原则
在索引字段上加⼊入函数:不走索引
is null/is not null:不走索引
覆盖索引:key-value都在索引里,如果select columns直接使⽤用的是索引列列就直接使⽤用覆盖索引
只要索引条件和or挨着:就⽤不上 where name = "jack" or age = 20
where contentId = 123 and (name = "jack" or age = 20) 可以使用索引
2.3. 索引分析总结
优势:
1、提⾼高查询速度
2、表连接的时候,加速连接
3、保证数据唯⼀一:唯⼀一索引
劣势
1、修改和增加数据时会提升开销
2、索引还会占⽤用物理理空间
3、在进⾏行行⼤大量量的insert或update、delete时,速度会变慢
适合建⽴立索引
1、数据差异化较⼤大
2、频繁查询的列列,where条件⾥里里经常⽤用到的
3、常⽤用的表关联字段 4、查询中统计或分组的字段
不不适合的
1、记录值特别少
2、值变化特别⼩小,重复率⾼高 3、经常增删改的
2.4. 数据库出现问题后如何死⽽不僵
mysql> show processlist;
mysql> kill pid;