首先说一下,什么是索引吧,索引就像字典的目录一样,帮助我们迅速查到数据。索引的定义就是帮助存储引擎快速获取数据的一种数据结构
优点
1. 顺序扫描,加快检索速度;
2. 将随机IO变成顺序IO
缺点
1.时间(创建、维护索引都需要耗费时间,特别数据量大的时候)
2.空间(索引也是要占用物理空间,数量越大,占用空间越大)
1. 字段有唯一性限制的,类似UUID,身份证之类的查询
2. 经常用到where等查询语句的,且字段区分度够大的
3. 经常用到group by,order by的字段,因为MySQL的B+tree建立索引是排好序的
1. 非空字段:指定列为NOT NULL,MySQL中含有空值的列很难进⾏查询优化,⽤0/特殊值/空串替代空值
2. 离散程度大的值(count()函数可以查看差异值),比如你对性别创建单列索引,都是男男女女,MySQL 还有一个查询优化器,查询优化器发现某个值出现在表的数据行中的百分比很高的时候,它一般会忽略索引,直接进行全表扫描。
3. 索引字段越小越好,这样磁盘IO越少嘛
1. 最左前缀匹配原则
2. =和in可以乱序,查询优化器会进行优化
3. 尽量选择区分度⾼的列作为索引(比例越大扫描的次数越少)
4. 索引列不能参与计算
5. 尽量扩展索引,不要新建索引(已经有a,要建a,b,直接修改a)
6. 选择较短的数据类型,减少磁盘占⽤率
1. 前缀索引优化;
2. 覆盖索引优化;
3. 主键索引最好是自增的;
4. 防止索引失效;