У меня есть таблица «TRANSACTION» на Sql Server 2008. Приблизительно 6 записей за 1 секунду вставляются в эту таблицу. (Так как это таблица финансовых транзакций) Итак, через 1 день вставляется 500 000 записей. Таблица разделяется еженедельно.SQL Server - производительность запросов больших таблиц с GROUP BY
Эта таблица в значительной степени используется для многих видов выбора (с помощью NOLOCK, конечно), вставки, операции обновления.
Считаете ли вы, что запрос ниже может замедлить другие критические операции выбора, ввода, обновления в той же таблице? Я думаю, даже если запрос ниже длится слишком долго, другие запросы выбора не замедлятся, так как этот запрос не блокирует таблицу. Но я не могу быть уверен, и прошу вас.
Обратите внимание, что столбцы в списке выбора НЕ индексируются в таблице.
SET @END_DATE = GETDATE()
SET @START_DATE = DATEADD(HOUR, -24, @END_DATE)
SELECT Column1, Column2, Column3, Column4, COUNT(*) FROM [TRANSACTION] WITH(NOLOCK)
WHERE TRANSACTION_DATE BETWEEN @START_DATE AND @END_DATE
GROUP BY Column1, Column2, Column3, Column4
Приложение работает на подходящем сервере баз данных. Таким образом, проблема с ЦП или памятью отсутствует. Единственное, что я не могу быть уверен в том, может ли возникнуть какой-либо риск для других запросов, которые выполняют выбор, вставку, обновление в одной таблице? Какие-либо проблемы со связью или ожидания? –
NOLOCK вызывает блокировку, Sch-s - стабильность схемы - это предотвращает запуск DDL против этой таблицы. Проверьте план запроса и не недооценивайте влияние на IO, независимо от процессора и памяти. IO обычно является узким местом в большинстве систем – Andrew