背景:从两张有关联的表查询数据,A表数据量1400万,B表数据量8000万。A与B通过ID逻辑关联,没有实际的外键。B表是后来扩展出来的.
问题:根据某个ID查询时超时,运行时跑不出结果。
原因:使用一个or条件,条件里面有一个是A.ID=B.ID
简单优化:将or条件拆开,使用union all;将之前使用表变量的部分换成了临时表;对排序的字段加上了索引
结果:在50ms内能够查询出结果,这个与之前的超时简直不能相比。
感想:感谢DBA mm的帮助,让我有了这样的体验,不实际的处理(哪怕很简单的表关系)千万级的数据量,真不知道SQL语句的性能差异。
实际的体验了使用or的性能居然能够差到这个地步,以后尽量避免使用了。
我没有描述清楚具体的问题,只是大致的说了下。我自己是明白了,记录下来以备后面参考。也希望能够给像我一样的SQL菜菜鸟有点启发。
SQL优化的实践之路还很长,我要慢慢走。工作过程中的体验随时记录下来,分享给大家。
本文转自Rt-张雪飞博客园博客,原文链接http://www.cnblogs.com/mszhangxuefei/p/worknotes-7.html如需转载请自行联系原作者
张雪飞