对SQL查询优化的补充--(in篇)

Posted on 2010-08-06 12:36  チャチャの楽園  阅读(2611)  评论(3编辑  收藏  举报

之前有一篇SQL优化的十条经验,感觉还是说的不够具体,现在就个人工作时遇到的具体问题进行补充。

 

 今天先讲一下关于select...where...in...这种情况吧。有些时候我们的查询条件里面出现了很多零散不连续的值,比如一个表的ID值,这时就只能在in语句后面加上一连串的值,中间以逗号分割。如果select语句是简单的查询还没什么问题(简单的意思就是不用多表关联查询),但是如果出现多表关联查询的话,效率就变得很差。(特别in后面加了几千个值的时候)

 

这时我们就需要一些小的技巧去提高查询性能了,技巧就在于使用筛选过的临时表来替代条件查询的表。比如,现在我要查询一个Phone表,还有关联到其他一些表,比如是运输表,工单表之类的。但查询条件里刚好是有Phone表里面的好几千个ID,一般就是 where phone.ID in (..........)这种情况。此时我们可以分两步来做:先用select (你所要的字段) into #tempTable from Phone where ID in (..........);接着本来要关联Phone表来进行联合查询的,现在就变成关联#tempTable了,删掉Phone表的关联,最后不要忘记drop table #tempTable这句哦。

 

这种分开步骤使用临时表进行过滤的做法比直接关联查询的效率要高很多,不信你可以自己试试。

Copyright © 2024 チャチャの楽園
Powered by .NET 8.0 on Kubernetes