1.确保索引列独立:当索引列被用于计算或函数时,数据库无法有效利用索引,导致查询效率降低。
例如,如果对一个日期类型的索引列进行日期函数操作,数据库将无法使用该索引快速定位数据,
而是需要进行全表扫描,从而显著增加查询时间。(索引列不独立,对索引字段进行计算操作、字段上使用函数。)
2.遵循最左前缀原则:当使用多列索引时,查询条件应包含索引的最左列。如果查询条件没有包含最左列,索引可能不会被使用。
3.避免使用NOT NULL约束:确保索引字段有NOT NULL约束,以避免因隐式转换导致的索引失效。
4.like以%开头,索引无效;当like前缀没有%,后缀有%时,索引有效。(使用了左模糊)
5.or语句前后没有同时使用索引。当or左右查询字段只有一个是索引,该索引失效,只有当or左右查询字段均为索引时,才会生效
6.组合索引,不是使用第一列索引,索引失效。
7.数据类型出现隐式转化。如varchar不加单引号的话可能会自动转换为int型(用select查询时),使索引无效,产生全表扫描。
8.在索引列上使用 IS NULL 或 IS NOT NULL操作(在 where 子句中对字段进行 null 值判断)
9.在索引字段上使用not,<>,!=。不等于操作符是永远不会用到索引的,因此对它的处理只会产生全表扫描。 优化方法: key<>0 改为 key>0 or key<0。
10.当全表扫描速度比索引速度快时,mysql会使用全表扫描,此时索引失效。
使用EXPLAIN分析查询:使用EXPLAIN命令分析SQL语句,检查是否使用了索引。如果EXPLAIN结果中的key列为NULL,说明没有使用索引。
索引优点:
大幅提高数据检索速度;提高分组或排序的效率。
索引缺点:
占用存储空间:索引本身也是表,会占用额外的存储空间,通常索引表占用的空间是数据表的1.5倍左右。
维护成本:索引的维护和创建需要时间成本,且这个成本随着数据量的增大而增大。
降低修改操作的效率:构建索引会降低数据表的修改操作(如删除、添加、修改)的效率,因为在修改数据表的同时还需要修改索引表。