我在SQL Server 2008 R2中有一個客戶和訂單表。兩者都有客戶ID(稱爲id
)的索引。我需要返回有關客戶表中所有客戶的詳細信息以及訂單表中的信息,例如第一個訂單的詳細信息。在SQL Server中加入子查詢的效率
我當前將訂單表的子查詢中的客戶表加入,子查詢返回了我需要的關於訂單的信息。例如:
SELECT c.id
,c.country
,First_orders.product
,First_orders.order_id
FROM customers c
LEFT JOIN SELECT(id,
product
FROM (SELECT id
,product
,order_id
,ROW_NUMBER() OVER (PARTITION BY id ORDER BY Order_Date asc) as order_No
FROM orders) orders
WHERE Order_no = 1) First_Orders
ON c.id = First_orders.id
我對SQL很陌生,想要了解我是否有效地做到這一點。最後,我在一個select查詢中將這樣的子查詢添加到customers表中,並且可能需要幾十分鐘才能運行。
那麼,我是否有效地做到這一點,或者可以改進?例如,我不確定我的訂單表中的id索引是否有用,也許我可以通過首先創建一個子查詢中的內容的臨時表並在其中創建一個唯一索引來加速查詢。臨時表,所以SQL Server知道id
現在是一個獨特的列,然後加入我的客戶表到這個臨時表?我通常在客戶和訂單表中有一兩百萬行。
非常感謝提前!
從可讀性的角度來看,大多數SQL開發人員會盡量避免這樣的嵌套子查詢,如果他們能。在需要像這樣鏈接派生表的情況下,首選是通過'WITH'命令前綴使用CTE。性能方面,它不應該有任何區別,但這只是一個約定和可讀性的問題。 – RBarryYoung 2013-02-26 17:24:02