SQL Server 2008 R2 に顧客と注文のテーブルがあります。どちらも顧客 ID ( と呼ばれる) にインデックスを持っていますid
。顧客テーブル内のすべての顧客に関する詳細と、最初の注文の詳細など、注文テーブルからの情報を返す必要があります。
私は現在、注文テーブルのサブクエリで顧客テーブルに参加し、サブクエリは注文について必要な情報を返します。例えば:
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にまったく慣れていないので、これを効率的に行っているかどうかを理解したいと思っています。このようなかなりの数のサブクエリを 1 つの選択クエリで customers テーブルに結合することになり、実行に数十分かかることがあります。
それで、私はこれを効率的に行っていますか、それとも改善できますか? たとえば、注文テーブルの id のインデックスが役に立つかどうかはわかりません。最初にサブクエリの内容の一時テーブルを作成し、id の一意のインデックスを作成することで、クエリを高速化できるかもしれません。 SQL Serverがid
一意の列であることを認識し、顧客テーブルをこの一時テーブルに結合するための一時テーブルですか? 通常、顧客テーブルと注文テーブルには 100 万から 200 万行あります。
よろしくお願いします!