Мои деньги связаны с возможностью того, что вы пытаетесь запросить некоторую функцию столбца char, например что-то вроде:
SELECT Column
FROM Table
WHERE UPPER(CharColumn) = 'ABC'
Очевидно, я просто догадываюсь, но это типичный источник проблем с производительностью для столбцов char
/ varchar
/ nvarchar
. Если вы пишете такие запросы, вы должны понимать, что перенос столбца в функцию не позволяет SQL Server выполнять поиск по индексу.
Также примите во внимание количество строк, которые вы фактически возвращаете; 9 миллионов строк не обязательно много в таблице, но даже 100 000 строк - это огромное количество в наборе результатов. Иногда узкое место просто передает все результаты.
Если ничего из этого не описывает вашу проблему, то я предлагаю обновить ваш пост, добавив некоторую информацию о схеме, ваших индексах и медленном запросе. Есть и другие способы оптимизации, которые возможны, хотя SQL Server 2000 уже давно работает, поэтому ваши возможности ограничены.
Исходя из размещенной вами схемы, при условии, что у вас есть индекс для столбца tag
, что вы выбираете только tag
и никаких других столбцов, которые могут не охватываться, ваше условие WHERE
является простым равенством в столбце tag
, и что количество возвращаемых результатов достаточно мало, я не думаю, что есть какие-либо дальнейшие оптимизации, которые вы можете сделать. Вы в значительной степени сократили это до самого простого случая.