я первоначально написал следующееПроизводительность: В чем разница между этими двумя запросами
SELECT t1.TransactionNumber
FROM t1
JOIN
(
SELECT MAX(id) id
FROM t1
WHERE Period BETWEEN '01-11-2013' and '01-12-2014'
GROUP BY AccountNumber
) t2
on t1.id= t2.id
Но это было слишком медленным. Потребовалось около 20 секунд, так как испытание, я изменил его к следующему
SELECT MAX(id) AS id
INTO #t2
FROM t1
WHERE Period BETWEEN '01-11-2013' and '01-12-2014'
GROUP BY AccountNumber
SELECT t1.id
FROM t1
JOIN #t2 t2
ON t1.id= t2.id
Второй запрос занял только 1 секунда, чтобы бежать. Второй запрос выполняет поиск индекса с помощью ключа PK, тогда как первый ключ выполняет сканирование.
Примечание: id является основным ключом, сгруппированным по таблице t1.
У вас есть планы выполнения для обоих запросов? – slavoo
Вы имели в виду это, чтобы быть самостоятельным соединением в столбце первичного ключа таблицы 't1' или есть другие таблицы? –
Существуют и другие таблицы, но это не должно быть релевантным. В первом запросе, если я запускаю только сам подзапрос, это занимает около 1 секунды. Но тогда, если ваш весь запрос, он занимает более 20 секунд. Я бы подумал, что это должно было занять не более 2 секунд, поскольку он соединяется с первичным ключом. Записи возвращаются из подзапроса меньше 2000 строк. – user172839