『壹』 sql語句in 後面跟的數據過多怎麼解決
解決辦法,使用臨時表:
第一步:創建臨時表,並將in內的數據插入到表中
select*into#from(
select'1'numunionall
select'2'unionall
select'3'unionall
.....
select'N'
)a
第二步:執行in查詢
select*from表where列in(selectnumfrom#)
第三步:銷毀臨時表
droptable#
若是連起來寫:
setnocounton;select*into#from(select'1'numunionallselect'2'unionallselect'3'unionall.....select'N')a;select*from表where列in(selectnumfrom#);droptable#
『貳』 sql 語句 in的優化。
假設原來的句子是
select * from t1 where t1.f1 in (select t2.f2 from t2 where t2.f2=xxx)
和你的很類似
你用子查詢 很慢
我們現在修改為:
select t1.* from t1 ,t2 where t1.f1 = t2.f2 and t2.f2=xxxx
這里使用了關聯查詢代替了子查詢大大提高效率。
其次你可以考慮在表t1.f1上加索引,提高查詢速度。
『叄』 怎麼優化 where中含有in 的sql
可以把IN換成LEFT JOIN 加上IS NOT NULL 的這種寫法 LEFT JOIN 效率比較高
『肆』 核銷明細查詢in條件過多導致sql超時優化
現狀:查詢條件中in條件包含了400+門店的條件 且是返回全表欄位,需要排序+分頁查詢 優化:(前提,做數據歸檔) 1.將大量門店查詢拆分成 50個門店一次查詢 ,且只查詢主鍵id,通過分次查詢將查詢到的數據匯總(此時數據可能會有上萬 但只包含主鍵id) 2.根據分頁條件去其中符合條件的主鍵id (此時安分頁篩選出來的數據一般10-30個) 3.根據篩選出的主鍵id通過in條件查詢符合條件的數據返回『伍』 Sql語句in後面跟的數據過多如何解決
如果是離散型數據就只能用in了,因為這些數據沒有規律,你就只能一項項列出來,讓它們都包含到你所要查詢的語句裡面。
如果是連續型數據就可以不用in了,可以用between...and來替代in,而且這樣寫一般來說效率要比in高。