Mysql 索引
Mysql索引
索引的出现其实就是为了提⾼数据查询的效率
MySQL 在查询⽅⾯主要就是两种⽅式:
- 全表扫描(⼀个⼀个挨个找)
- 根据索引检索
建⽴索引注意事项
- 索引不是越多越好,虽然索引会提⾼ select 效率,但是也降低了insert以及update的效率
- 数据量⼩的表不需要建⽴索引,会增加额外的索引开销
- 不经常使⽤的列不要建⽴索引
- 频繁更新的列不要建⽴索引,会影响更新的效率
MySQL的索引有⼏种
- 普通索引:最基本的索引,没有任何限制
- 唯⼀索引:与普通索引类似,但索引列的值必须是唯⼀的,允许空值
- 主键索引:⼀种特殊的唯⼀索引,⼀个表只能有⼀个主键,不允许有空值
- 组合索引:在多个字段上创建的索引,只有在查询条件中使⽤了创建索引的第⼀个字段,索引才会被使⽤
- 全⽂索引:主要⽤来查找⽂本中的关键字,类似于搜索引擎
索引优化
- 尽量避免在where字句中对字段进⾏空值判断,这会导致引擎放弃使⽤索引,进⾏全表扫描
- 字段值分布很稀少的字段,不适合建⽴索引
- 不要⽤字符字段做主键
- 字符字段只建⽴前缀索引
- 不要⽤外键和UNIQUE
- 使⽤多列索引时,注意顺序和查询条件保持⼀致,同时删除不必要的单列索引
索引失效的情况
- 模糊匹配当中以 % 开头时,索引失效
- OR 有⼀边的条件字段没有索引时,索引失效
- 使⽤复合索引的时候,没有使⽤左侧的列查找,索引失效
- 在 where 当中索引列参加了运算,索引失效
- 在 where 当中索引列使⽤了函数,索引失效
Note:
- 在任何数据库当中主键上都会⾃动添加索引对象
- 在mysql当中,⼀个字段上如果有unique约束的话,也会⾃动创建索引对象