Если я использую этот запрос, зависания SQL Server или нужно много времени, чтобы выполнить запрос:SQL Server зависает при использовании ORDER BY
SELECT TOP 1 mssid
FROM my_table
WHERE serial = 'myserialcode'
ORDER BY times DESC;
Этот запрос прост, он должен показать мне последнюю запись из последовательный. В таблице содержится 700 тыс. Записей, это не проблема, не так ли?
Если я удалю ORDER BY times DESC
, он работает быстро, но я не получаю последнюю запись.
Обход запросов, не работает слишком:
SELECT TOP 1 *
FROM my_table
WHERE serial = 'myserialcode'
AND times = (SELECT MAX(times)
FROM my_table
WHERE serial = 'myserialcode')
Datatypes:
- серийными = VARCHAR 20
- раз = BIGINT 19,0
Спасибо, Грегор
EDIT: Я разговаривал с администратором сервера SQL Server, он сказал мне, что таблица разбита (?). 3 дня назад запрос работал без проблем. Он исправит это, поэтому я думаю, что он решен. В любом случае, я создам индекс на mssid и times, и буду использовать указанные поля вместо * в будущем, спасибо!
РЕДАКТИРОВАТЬ 2: Стол или строка из таблицы были сломаны и убили запрос. Теперь он работает снова, 0,031 сек. :) Также запрошен запрос на индексацию. И если я использовал запрос выше, с другим серийным, он работал.
сортировки является дорогостоящей операцией, которая будет принимать время. Если возможно, добавьте индекс на 'serial' и' times' –
Указатели на какие столбцы? –
Если у вас его еще нет - попробуйте добавить индекс в 'serial' и включите' mssid': 'CREATE NONCLUSTERED INDEX IX01_YourTable ON dbo.YourTable (serial) INCLUDE (mssid);' - это улучшает производительность вообще ? Есть ли указатель на «времена»? –