Почему выполнение SQL-запроса занимает так много времени? - PullRequest
0 голосов
/ 16 января 2011

У меня есть запрос, который вы можете увидеть ниже:

SELECT TOP(50000)* FROM
[Database].[dbo].[Table] WHERE Column
IS NOT NULL ORDER BY Column2 DESC

Для выполнения требуется 2 мин 21 с , всего записей около 350K

Типы столбцов

ID int
Column1 nvarchar(50)
Column2 nvarchar(250)
Column3 datetime
Column4 nvarchar(1000)
Column5 nvarchar(1000)
Column6 nvarchar(50)

На мой взгляд, это занимает много времени. Может кто-нибудь предложить мне, как улучшить производительность? Или, может быть, кто-то знает, что может быть причиной?

Ответы [ 3 ]

3 голосов
/ 16 января 2011

Несколько вещей:

  • У вас есть индекс в столбце, где вы фильтруете?Номер столбца не в вашем вопросе
  • Это может не помочь, у вас есть SELECT *
  • Использует ли индекс столбец2?
  • Вы пробовали отдельно?

Дизайн

  • Вам нужен nvarchar?Сделать это varchar

По сути, вы возвращаете около 1/7 таблицы, поэтому любой индекс в столбце фильтра можно игнорировать в сочетании с SELECT *.Индекс в столбце 2 может помочь избежать промежуточной сортировки.

Редактировать:

С 3 столбцами вы можете сделать его , охватывающим (как комментарий marc_s)

1 голос
/ 16 января 2011

Вы возвращаете большой объем данных - сетевой ввод-вывод может легко учитывать затраченное время.

Вы также можете пропустить индекс в столбце column2, который может вызвать сканирование таблицы вместоПоиск по индексу (дорого против дешевой операции).

0 голосов
/ 16 января 2011

Вы поместили индекс в столбец 2 (тот, который использовался для заказа)?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...