暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

SQL优化必懂概念

青雨果果 2021-06-03
491

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关系


重点

子查询等价改写、半连接等价改写就会用到表与表关系这个重要的概念


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


文章转载自青雨果果,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论