
SQL
优化必读概念
一
基数
概念
某个列唯一建的数量叫做基数
重点
查询结果是返回表中5%以内的数据时,应该走索引;当查询结果返回的是超过表中5%时,应该走全表扫描
二
选择性
概念
基数与总行数的比值再乘以100%就是某个列的选择性
重点
一个列选择性大于20%,该列的数据分别就比较均衡了。一个列出现在where条件中,该列没有创建索引并且选择行大于20%,那么该列就必须创建索引,从而提升SQL查询性能
三
直方图
概念
如果没有对基数低的列收集直方图统计信息,基于成本的优化器(CBO)会认为该列数据分布是均衡的。会造成执行计划里面的Rows是假的
重点
直方图用来帮助CBO在对基数很低、数据分布不均衡的列进行Rows估算的时候,可以得到更精确的Row就够了
四
回表
概念
通过索引记录的rowid访问表中的数据就叫回表。回表一般是单块读,回表此时太多会严重影响SQL性能,如果回表此时太多,就不应该走索引扫描,应该走全表扫描
重点
SQL优化时,一定要注意回表次数!特步时要注意回表的物理I/O次数。可以解释为什么返回表中5%以内的数据走索引、超过表中5%的数据要走全表扫描
五
集群因子
概念
集群因子用于判断索引回表需要消耗的物理I/O次数。介于表的块数和表行数中间
重点
集群因子与块数接近,说明表的数据基本上是有序的,而且其顺序基本与索引顺序一样。这样在进行索引范围或者索引扫描的时候,回表只需要读取少量的数据块就能完成。如果集群因子与表记录数接近,说明表的数据和索引顺序差异很大,在进行索引范围扫描或者索引全扫描的时候,回表会读取更多的数据块。建议合适的组合索引消除回表,或者建议组合索引进来减少回表次数
六
表与表之间的关系
概念
1:1关系 1:N关系 N:N关系
重点
子查询等价改写、半连接等价改写就会用到表与表关系这个重要的概念

上面分享的是我自己的一些见解,欢迎大家一起来探讨,我会不定期更新内容,希望大家关注我~




