索引的种类 --> 每个种类的作用,创建方式
索引的数据结构 --> 结构的原理,优缺点
Sql的执行计划
Sql缓存,服务器参数
大表查询优化
适合创建索引的情况:
1、在经常需要搜索的列上,可以加快搜索的速度。
2、在作为主键的列上,强制该列的唯一性和组织表中数据的排列结构。
3、在经常用于连接两张表的列上,这些列主要是一些外键,可以加快连接的速度。
4、在经常需要根据范围进行搜索的列上创建索引,因为索引已经排序,其指定的范围是连续的。
5、在经常需要排序的列上创建索引,因为索引已经排序,这样查询可以利用索引的排序,加快排序查询时间。
6、在经常使用在WHERE子句中的列上面创建索引,加快条件的判断速度。
不适合建立索引的情况:
1.不适合键值较少的列(重复数据较多的列)
2.表记录太少
3.经常增删改的表
索引失效的情况:
1.like的模糊查询以%开头,索引失效
2.如果列类型是字符串,那一定要在条件中将数据使用引号引用起来,否则不会使用索引
3.对于多列索引,不是使用的第一部分,则不会使用索引
4.where中索引列使用了函数
5.条件中用or,即使其中有条件带索引,也不会使用索引查询(这就是查询尽量不要用or的原因,用in吧)
注意:使用or,又想索引生效,只能将or条件中的每个列都加上索引
6.索引不存储null值
更准确的说,单列索引不存储null值,复合索引不存储全为null的值。索引不能存储Null,所以对这列采用is null条件时,因为索引上根本没Null值,不能利用到索引,只能全表扫描。为什么索引列不能存Null值?
将索引列值进行建树,其中必然涉及到诸多的比较操作。Null值的特殊性就在于参与的运算大多取值为null。
这样的话,null值实际上是不能参与进建索引的过程。也就是说,null值不会像其他取值一样出现在索引树的叶子节点上。
参考 :https://blog.csdn.net/bless2015/article/details/84134361
https://www.cnblogs.com/zhuyeshen/p/8625634.html
https://blog.csdn.net/weixin_34009794/article/details/88700745
https://www.cnblogs.com/bypp/p/7755307.html
https://blog.csdn.net/choath/article/details/80779129