索引是什么
在关系数据库 中,索引是一种单独的、物理的对数据库表中一列或多列的值进行排序的一种 存储结构 ,它是某个表中一列或若干列值的集合和相应的指向表中物理标识这些值的数据页的逻辑指针清单。 索引的作用相当于图书的目录,可以根据目录中的页码快速找到所需的内容。
索引失效
索引失效(Index Degradation或Index Inefficiency)是指在数据库查询过程中,虽然相关表上有可用的索引,但由于多种原因,数据库未能有效地利用这些索引来加速查询过程,而是选择全表扫描或者其他效率较低的检索方式。
如何避免索引失效(高薪常问)
(1) 范围条件查询![](https://i-blog.csdnimg.cn/blog_migrate/8dc30847943eae0ce5b3b5b587602ea1.png)
(2) 不要在索引上使用函数运算, 否则索引也会失效.
比如在索引上使用切割函数, 就会使索引失效.
(3) 字符串不加引号, 造成索引失效.![](https://i-blog.csdnimg.cn/blog_migrate/b48c9ddced170ae927995b2ca4d5bea8.png)
(4) 尽量使用索引覆盖,
避免 select *, 这样能提
高查询效率.
如果索引列完全包含查询列, 那么查询的时候把要查的列写出来, 不使用 select *
通俗讲:
索引覆盖: 通过索引就能找到你要的资料信息
回表:通过索引不能完全拿出你要的信息,需要通过数据表再次查询一次才能获取到.
explain select age,name,id,tel from tb where age=22 and name ='张三'
SQL
(5) or 关键字连接
用 or 分割开的条件, 如果 or 前面的列有索引, or 后面的列没有索引, 那么查询的时候前后索引都会失效
索引失效案例:
如果一定要 or 查用询, 可以考虑下 or 连接的条件列都加索引, 这样就不会失效了.