Запрос SQL Server очень медленный, когда нечего извлекать? - PullRequest
1 голос
/ 02 июля 2010

Мы сталкиваемся со странной проблемой производительности SQL Server Express 2005 в очень простом состоянии.

У нас есть таблица со столбцами: [timestamp], [id], [value].и только один первичный уникальный индекс для [timestamp] + [id].

Таблица содержит около 68 000 000 записей.

Запрос: SELECT TOP 1 отметка времени FROM таблицы WHERE id = 1234ORDER BY timestamp

Если для этого идентификатора имеется хотя бы одна запись, результат выдается за несколько миллисекунд.Если для этого идентификатора есть запись no , результат выдается как минимум за 30 СЕКУНД !!!

Мы пробовали много других простых похожих запросов, и как только у нас нет соответствующих записей для идентификатора, время обработки ужасно велико.

Есть ли у вас какие-либо объяснения и идеи, чтобы этого избежать?

Ответы [ 2 ]

1 голос
/ 02 июля 2010

ТОП 1 ЗАКАЗАТЬ НА ЧЕМ?

Если он находит одну запись, он должен просмотреть всю таблицу, чтобы найти больше, так как у вас нет индекс по id.

Если вы сделали, но хотели «ORDER BY timestamp», он все равно будет сканировать таблицу, потому что не знает, что идентификатор уникален в индексе отметки времени (хотя это может иметь смысл для вас, поскольку идентификатор объявлен уникальным скажем - да? Как, если это не уникальный собственный индекс или как 1-е поле в многоколоночном индексе? - или они оба монотонно увеличиваются, скажем - не так ли?)

0 голосов
/ 05 июля 2010

Если идентификатор является уникальным идентификатором, тогда ваш ORDER BY не нужен - и индекса только для этого поля будет достаточно.

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