好比: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
select * from TableA where ID=42; select * from TableA where ID=216; ……
然並卵,18663ms,仍是好慢的code
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