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

关联索引

四海内皆兄弟 2022-05-17
340

  我们经常看到两个表关联的SQL仅仅是纯关联。比如Select * form

a,b where a.id=b.id 没有其他的了。那么这种场景最好的结果是a或者b有一个表全表扫描。另外一个表跟踪全表扫描。

   以上还是良好结果,如果更差的结果是两个表的关联列还没有索引,那么就是笛卡尔积了。

     下面用MySQL为例做一下实验。Oracle与PG也是一样的道理,不一一展示。只是MySQL的日志比较容易看。首先构造两个表X和Y 全表数据如下:


两个表都没有索引,模拟一般开发人员日常写的SQL。



这里的56是7X7+7(两个表没有索引即全表X全表。由于关联返回还要+上自己的全表)这里仅仅是两个表只有7条数据,试想如果这两个表分别有1万条数据呢?10万条数据呢?那么执行的慢是数据库不行吗?经常有人说关系型数据库处理不了大数据,其实这是对关系数据库有误解,当然也有很大程度上对大数据有误解。在关系型数据库中如果每天增量1TB数据,我觉得那算是和大数据沾边了,如果每天增加几个GB还是请尊重一下大数据吧。


     那么有索引情况下会如何呢?


从结果看到就是A表一次全表+B表一次全表。没有乘积效应。只是能是不幸中的万幸。如果他就是要全表更新的话。


     结论关联表一定要有索引,哪怕是全表,也就是+的关系。如果没有那就是乘的关系。


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

评论