У меня есть следующая таблица с 1 миллиардом записей.SQL Server 2008 R2: запрос настройки
create table PfTest
(
cola int,
colb int,
colc date,
cold varchar(10),
ID int
);
Теперь я хочу отображать записи, относящиеся к конкретным датам, а не в определенные даты.
Для которого я использую следующие 2-х типов запросов:
Запрос 1:
select DISTINCT cola, colb, colc, cold, ID
from PfTest
WHERE colc In ('2014-01-01')
AND cold NOT IN (SELECT cold
FROM PfTest
WHERE ID = 1
AND colc IN ('2014-01-02', '2014-01-03',
'2014-01-04', '2014-01-05', '2014-01-06'));
Query 2:
WITH cte AS
(
SELECT DISTINCT cola, colb, colc, cold, ID
FROM PfTest
WHERE cold NOT IN (SELECT cold FROM PfTest
WHERE ID = 1
AND colc IN('2014-01-02', '2014-01-03',
'2014-01-04', '2014-01-05', '2014-01-06'))
)
SELECT cola, colb, colc, cold, ID
FROM cte
WHERE colc IN ('2014-01-01');
Над обоими планами запросов одинаковы для исполнения. И оба требуют огромного времени для исполнения. Могу ли я написать несколько лучших запросов для этой ситуации?
У вас есть «ПК» на вашем столе, а также любой индекс? –
@FelixPamittan, Yup! У меня есть 'PK', а не кластеризованный индекс. – MAK
Это 'ID' правильно? Затем вы можете удалить 'DISTINCT'. –