У меня есть таблица клиентов и заказов в SQL Server 2008 R2. Оба имеют индексы для идентификатора клиента (называемого 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 и хочу понять, эффективно ли я это делаю. В итоге я оставил присоединение довольно многих подзапросов, подобных этому, к таблице клиентов в одном запросе на выборку, и это может занять десятки минут.
Итак, я делаю это эффективно или это можно улучшить? Например, я не уверен, что мой индекс по идентификатору в таблице заказов полезен, и, возможно, я мог бы ускорить запрос, создав временную таблицу того, что находится в подзапросе, и создав уникальный индекс по идентификатору в таблице заказов. временная таблица, поэтому SQL Server знает, что id
теперь является уникальным столбцом, а затем присоединяет таблицу моих клиентов к этой временной таблице? Обычно у меня есть один или два миллиона строк в таблицах клиентов и заказов.
Спасибо заранее!
WITH
. С точки зрения производительности это не должно иметь никакого значения, это просто вопрос соглашения и удобочитаемости. - person RBarryYoung   schedule 26.02.2013