2009-10-18 136 views
0

哪種方式更好的檢索多行?mysql查詢select - where - in - join

select * 
    from order_details 
where order_id in (1,2,3, ... ....) 

...或:

 select * 
     from order_details 
INNER JOIN orders on orders.id = order_details.order_id 
INNER JOIN customers on customers.id = orders.customer_id 
    where customers.id = 3 
+2

通常情況下,它取決於... :) – 2009-10-18 21:03:31

+1

您提供了一個不好的例子 - 第一個查詢基於ORDER_ID獲取ORDER_DETAIL記錄列表;第二個查詢正在查找'CUSTOMER_ID'是特定值的'ORDER_DETAIL'記錄。 – 2009-10-18 22:27:15

回答

3

第一個版本從一張表中選擇,因此它的工作量較少。

但是,如果第二個查詢產生正確的答案,那麼您必須使用另外兩個表來完成工作,以建立order_id值列表以生成第一個語句,在這種情況下,聚合負載會更大,並且您總體上使用第二個陳述會更好。

通常,讓SQL優化器優化;在優化方面比在自己的方法更好,在解決整個問題而不是解決問題時效果最好。

(第二個選項通常在性能總工作量爲先,如果僅僅是DBMS不必發送中間結果返回給客戶端和解析,優化兩個分開的語句。)

此外,第二條語句的結果集的行大小更大(因爲'*'覆蓋了3個表格中的列,而不是1個)。這實際上不是兩個等價SQL語句的公平比較。

+0

同意..在第二個查詢我應該限制選擇order_details。* – Addy 2009-10-19 18:45:32

0

我會建議您嘗試他們兩個,做一個標杆。因爲它可以依賴索引,列大小和行數。

不應該很難,因爲例如phpMyAdmin顯示它執行每個查詢的執行時間。