索引的优点:
- 索引大大减少了服务器需要扫描的数据量
- 索引可以帮助服务器避免排序和临时表
- 索引可以将随机I/O变为顺序I/O
索引的缺点:
- 增加写入成本(进行增删改操作时需要维护索引)
- 占用存储空间(索引本质上是额外的数据)
mysql索引类型:
- 主键索引:唯一且不能为空,mysql默认使用B+Tree作为索引存储结构
- 唯一索引:约束列的值必须唯一,但允许NULL
- 普通索引:仅用于提高查询速度,没有唯一性约束
- 全文索引:适用于全文搜索,如搜索引擎中的关键词匹配(仅限MyISAM和InnoDB)
- 组合索引(联合索引):由多个列组合形成的索引;查询时必须使用索引的前导列,否则索引无法生效
- 哈希索引:适用于等值查询,不适用于范围查询;主要用于memory存储引擎
如何优化索引:
- 避免在索引列上使用函数(LEFT(name,3)='abc'无法命中索引)
- 避免隐式类型转换(WHERE age='18',age是INT,会导致全表扫描)
- 索引列不能用!=、<>,会导致全表扫描
- 避免LIKE'%关键字%'查询,可以使用全文索引
- 索引字段尽量短(字符串类型时,可以使用前缀索引)
- 删除低效索引,避免影响增删改操作