数据库优化 ------ 索引的使用问题

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/YQYnsmile/article/details/82853586

  最近,在工作的过程中,会时不时的碰到要不要添加索引的问题,于是结合自己的经历,忙里偷闲总结下,希望自已以后忘记了可以快速的记忆起来,同时也希望也可以帮助一些跟我一样有需求的小伙伴。

  一直以来,我总是不自觉的去想,到底什么是索引?为什么建立索引可以加快查询的速度?直到后面在网上看到一个答案,那就是其实跟查字典是差不多的概念,建立索引其实就是给字典编页码的过程,后面理解起来就简单的多了。

  那就废话少说,在下面的这些情况下,我觉得应该是要考虑加索引的:

(1)一张表的主键

(2)表的物理外键

(3)经常用户连接的字段,不管是左连接、还是右连接,还是inner join

(4)表的数据量超过500条记录的

(5)经常用作查询条件的,即使where之后的字段

(6)选择性能高的字段(即某种业务需要的)

  然后有一些情况,我觉得应该是考虑不加索引的:

(1)表的某个字段的大小很大,比如Blob类型的

(2)经常进行除了查询之外的操作的表

  实际的情况:

(1)and 前后的字段经常出现的,可以考虑创建复合索引,但是如果很少的情况,拆分为单个索引

(2)建立复合索引的时候要记住最左匹配原则,3个字段以上的复合索引要慎重考虑,因为单个索引往往更好

(3)like 查询的时候,如果使用%like%类型的,其实索引是不起效果的,但是like%这种是可以的,所以like语句也要考虑是否真的必要

(4)对于表字段的值为NULL的情况,一旦有了NUL:L其实索引是不起效果的,复合索引的某个字段存在NULL值同样,默认值最好不要使用NULL

 (5)    mysql查询一次只使用一个索引,如果where子句中已经使用了索引的话,那么order by中的列是不会使用索引的,如果需要可以考虑复合索引

 (6)   NOT IN 操作适当采用NOT EXIST,因为NOT IN会对全表进行扫描

 (7)   不要在相关的字段中使用数据库函数,这样索引也是不起效果的

 (8)   短索引的使用,比如一些字段是varchar类型的,而且前面的部分是相同的,这个可以考虑创建短索引

  目前我个人感觉用的比较多的就上面的这些,其实现在随着mysql的版本的升级,有很多地方数据库引擎都慢慢帮我们做了适当的优化,需要想更好的使用索引,我觉得还是根据版本看文档的比较好,如果还有其他的情况或者又不对的地方,欢迎指教。 

  

猜你喜欢

转载自blog.csdn.net/YQYnsmile/article/details/82853586