比如: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)
52W數據,查詢速度19386ms,好慢怎么辦?程序都卡死了。
?
那么試一下百度搜索到的優化方式?
1.將in里面的ID分拆查詢,再合并數據
select * from TableA where ID=42; select * from TableA where ID=216; ……
然并卵,18663ms,還是好慢的
?
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,沒用
?
總結:
1.沒用找到特別能優化的方法。而事實上,程序業務并不需要查詢表里面所有的字段*,把*改為自己需要的那幾個字段,則很快查詢出來。in查詢(140ms),分拆單獨查詢(263ms)。
2.去掉沒有數據的QID并沒有影響到查詢的速度。比如42、216,,219是沒有數據的,去不去掉都沒看見有什么影響,也許是自己數據量小吧。
?
通過此次優化,覺得以后可能很多程序上的sql寫法就不要貪方便直接寫*號了,以后優化也許會根據業務功能逐個進行優化,大而全的優化也許大概也有個上限。
?