比如: select id, name from table1 where name = 'x' union all select id, name from table2 where name = 'x'
與
select * from (select id, name from table1 union all select id, name from table2) where name = 'x'.
哪一種方式性能更好一些呢? 希望高手能詳細說明下, 並且考慮到有索引和無索引的情況
結果:
先 JOIN 縮小數據集,然后 用UNION 更快
建議使用先where再union的方式,通過過濾得到小的數據量,然后再去和其他數據做join 等處理,這應該是數據處理的一個原則。當然了,將過多的數據抓過來,經過了層層處理,最后再通過條件去過濾,這也是效率低下語句的通病。
不過,對於你的兩條語句,有可能他們的執行計划都是一樣的,不管有沒有索引的情況。
先用where過濾,再用union快......可以用執行計划查看COST...
也可以通過實際速度來查看...