索引的作用
- 索引类似书籍目录,查找数据,先查找目录,定位页码
性能影响
- 索引能大大减少查询数据时需要扫描的数据量,提高查询速度,
- 避免排序和使用临时表
- 将随机I/O变顺序I/O
- 降低写速度,占用磁盘
使用场景
- 小表,全盘扫描效率更高
- 中大型表,索引作用很大
- 特大型表,建立和使用索引的代价将随之增大,可采用分区技术
索引类型
- 普通索引,最基本索引,无约束
- 唯一索引,具有唯一性约束,
- 主键索引,特殊唯一索引.不允许空值,单表唯一,可以与外键构成参照完整性约束
- 组合索引,多列组合在一起创建索引
- 外键索引,仅INNODB使用,保证数据的一致性,完整性,实现级联操作
- 全文索引,仅MYISAM使用,且只能针对英文
创建原则
- 适合索引的列是where和join的on中用到的列
- 索引列的基数越大,效果越好
- 对字符串索引,应该制定一个前缀长度,可以节省索引空间
- 根据需要创建组合索引
- 避免创建过多索引
- 主键尽量选择较短的数据类型,减少磁盘占用,提高查询效率
注意事项
- 复合索引遵循前缀原则
- like查询,%不能在前,可以考虑全文索引
- column is null 可以使用索引
- 如果mysql估计使用索引比全表扫描更慢,会弃用索引
- 如果or前的条件中的列有索引,后面的没有,索引不会被用到
- 列类型是字符串,查询时需要给值加上引号代表字符串,否则索引无效