数据库 - MySql索引的合理使用及优化

索引可以帮助我们更快查询、排序。但在使用上要避免一些导致索引失效的情况,同时要合理的使用索引,毕竟索引也是有缺点的,建立不当也会导致查询更慢,维护困难。

  1. 索引列上不能使用表达式或函数
  2. 对字符串建立前缀索引(因为不同引擎对索引列的长度有限制,所以字符串太长无法建立索引或者索引查询效率很低)
CREATE INDEX INDEX_NAME ON table(col_name(n)) //n即为前缀长度

    3.注意前缀索引列的选择性 : 索引的选择性是不重复的索引值和表的记录数的比值。不要选择性太小。

        abcio,abeop,cedui,ceaop。 比较前缀索引宽度为2和为3的选择性。

    4.可以的话,建立合适的联合索引而不是给每一列都建立索引

    5.建立联合索引时:经常会被使用到的列放在最左边(最左匹配原则),选择性高的列优先,宽度小(长度)的列优先

    6.避免使用like查询以'%'开头

    7.避免使用select * ......进行查询。

    8.可以为所有要查询的列建立索引(覆盖索引(innodb)),默认的主键索引列可以直接使用。覆盖索引不需要回表,直接在索引中就可以查询到字段数据。

    9.避免使用in,not in,>,<等范围查找,特别是组合索引最左边的列。

    10.适当的为查询条件字段加索引,优化锁,避免加表级锁。

        select * from t_goods where status=1 for update;   //status如果建立了索引加行级锁,没有索引且不是主键加表级锁 


猜你喜欢

转载自blog.csdn.net/b9x__/article/details/80248361