MySQL索引建立原则

一. 索引的建立原则

索引的设计需要遵循一些已有的原则, 这样便于提升索引的使用效率, 更高效的使用索引.

  1. 对查询频次较高, 且数据量比较大的表, 建立索引.

  2. 索引字段的选择, 最佳候选列应当从where子句的条件中提取, 如果where子句中的组合比较多, 那么应当挑选最常用, 过滤效果最好的列的组合.

  3. 如果where后有多个条件经常被用到, 建议建立符合 索引, 复合索引需要遵循最左前缀法则, N个列组合而成的复合索引, 相当于创建了N个索引.

复合索引命名规则 index_表名_列名1_列名2_列明3

比如:create index idx_seller_name_sta_addr on tb_seller(name, status, address)

复合索引需要遵循最左前缀法则, N个列组合而成的复合索引, 相当于创建了N个索引. 最左前缀法则后面会详细介绍~

  1. 使用唯一索引, 区分度越高, 使用索引的效率越高.

  2. 索引并非越多越好, 如果该表赠,删,改操作较多, 慎重选择建立索引, 过多索引会降低表维护效率.

  3. 使用短索引, 提高索引访问时的I/O效率, 因此也相应提升了Mysql查询效率.

  4. 多表连接的字段上需要建立索引,这样可以极大提高表连接的效率.

  5. 排序字段上, 因为排序效率低, 添加索引能提高查询效率.

二.如何避免索引失效

  1. 遵循最左前缀法则

如果在查询的时候, 使用了复合索引, 要遵循最左前缀法则, 也就是查询从索引的最左列开始, 并且不能跳过索引中的列.如果不包含最左边的索引列, 则其他索引不生效;如果包含了最左边的索引列, 但是跳过了一列直接索引了复合索引的第三列, 则第三列的索引不生效.

  1. 不要在索引上使用运算, 否则索引也会失效.

  2. 字符串不加引号, 造成索引失效.

  3. 尽量使用覆盖索引, 避免select *, 这样能提高查询效率.

  4. or关键字连接

用or分割开的条件, 如果or前面的列有索引, or后面的列没有索引, 那么查询的时候索引会失效, 如果一定要用or查询, 可以考虑下or连接的条件列都加索引, 这样就不会失效了.

  1. like模糊查询

在使用like模糊查询时, 如果like%也就是%加在后面索引不会失效, 如果%lik或%like%也就是%加在前面, 索引会失效.

如果查询的列占整张表的绝大多数, 那么就会全表扫描, 不会走索引. 所以在查询的时候走不走索引不能百分百肯定.

也就是说如果查找一个稀有数据, 如果建立了索引, 就会走索引. 如果查询的数据表达绝大多数都符合条件, 就全表扫描, 不走索引.

你可能感兴趣的:(MySQL,mysql,数据库,sql)