1樓:我哭我哭哭哭
select id from table
where
( a=9 and b=7 )
or( a=0 and b=1 )
and c > 0
這個語句就一層沒有太大的優化
sql語句被解析的時候where條件是從後往前篩選的所以你可以根據篩選掉的資料量 把where條件位置變換一下無比將能篩選掉最多不符的資料放到最後
再就是為了減少資料的篩選量c>0最好改成c>=1
2樓:朱星的布拉格
首先要看你取出的資料要滿足什麼條件,直接在where裡寫出條件即可,不必對資料進行分析,然後將條件轉換為其他。比如,你將「id為03 04 07 08的資料」轉換為「( a=9 or a=0 ) and ( b=9 or b=0 ) and c > 0
」或者「( a=9 or a=0 ) and ( b=7 or b=1 ) and c > 0
」都不是很好,因為資料庫是變動的,「id為03 04 07 08的資料」現在經分析是等同於「( a=9 or a=0 ) and ( b=9 or b=0 ) and c > 0
」,不見得以後還等同於「( a=9 or a=0 ) and ( b=9 or b=0 ) and c > 0
」。所以我的建議是直接寫條件。
寫成:select id from table where id=『03』 or id=『04』 or id=『07』 or id=『08』 ;
或者:select id from table where id in(『03』,『04』,『07』,『08』);
in 表示取值在列出值裡面。
3樓:匿名使用者
select a.id from table a where a.id in(『03』,『04』,『07』,『08』);
sql語句求優化,聽說NOT IN語句不好求優化
阿冬 還要注意是在哪一種資料庫管理系統中,有些就不支援minus,不過not exists應該都支援。 一支紅纓槍 select name from test1 a where not exists select from test2 b where b.name admin and b.name ...
SQL語句優化,哪位高手來幫幫忙
你的條件,datediff dd,table1.time,2012 12 03 0 and datepart mi,1 time 00 and left 1 time,18 left 2 time,18 你在字段都加了function 注定了只能全表掃瞄。考慮一下不加function怎麼處理吧。建立...
SQL語句問題,SQL語句問題
select identity int,1,1 as newid,sale.prtid as id,products.prtname as 商品名稱,sum sale.prtnum as 銷售總量 into a from sale,products where sale.prtid products...