我在 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 很陌生,想了解我是否有效地执行此操作。我最终在一个选择查询中将很多这样的子查询加入到客户表中,并且可能需要数十分钟才能运行。
那么我这样做是有效的还是可以改进的?例如,我不确定我在订单表中的 id 索引是否有任何用途,也许我可以通过首先创建子查询中内容的临时表并在 id 上创建唯一索引来加快查询速度临时表,所以 SQL Server 知道id
现在是一个唯一列,然后将我的客户表加入这个临时表?我通常在客户和订单表中有一两百万行。
提前谢谢了!