Where條件的in裏面放太多數據致使很慢

好比:select * from TableA where ID in (42,216,219,230,231,220,249,250,221,251,252,217,253,255,256,254,257,258,1804)sql

52W數據,查詢速度19386ms,好慢怎麼辦?程序都卡死了。優化

 

那麼試一下百度搜索到的優化方式?spa

1.將in裏面的ID分拆查詢,再合併數據
select * from TableA where ID=42;
select * from TableA where ID=216;
……

然並卵,18663ms,仍是好慢的code

 

2.將in裏面的ID放到臨時表,再經過聯合查詢
select *  into #tmpClass from TableClass where QID in (42,216,219,230,231,220,249,250,221,251,252,217,253,255,256,254,257,258,1804);
select * from TableA inner join #tmpClass on TableA.QID=#tmpClass.QID

33570ms,沒用blog

 

總結:it

1.沒用找到特別能優化的方法。而事實上,程序業務並不須要查詢表裏面全部的字段*,把*改成本身須要的那幾個字段,則很快查詢出來。in查詢(140ms),分拆單獨查詢(263ms)。class

2.去掉沒有數據的QID並無影響到查詢的速度。好比4二、216,,219是沒有數據的,去不去掉都沒看見有什麼影響,也許是本身數據量小吧。百度

 

經過這次優化,以爲之後可能不少程序上的sql寫法就不要貪方便直接寫*號了,之後優化也許會根據業務功能逐個進行優化,大而全的優化也許大概也有個上限。select

相關文章
相關標籤/搜索