У меня есть запрос, выполнение которого занимает слишком много времени. Это просто и столы маленькие. Упрощенный запрос (но все еще медленный):
SELECT D.ID, C.Name, T.Name AS TownName
FROM Documents D, Companies C, Towns T
WHERE C.ID = D.Company AND T.ID = C.Town
ORDER BY C.Name
Первичные ключи и внешние ключи между таблицами установлены правильно. Кроме того, индексируется столбец Companies.Name
.
Я пытался использовать JOIN, перезапускать SQL Server, перестраивать индексы и т. д., но для выполнения на моем компьютере с SSD по-прежнему требуется около 40 секунд. Количество записей в таблицах Documents
и Companies
составляет всего 18К (в настоящее время они 1:1) и всего около 20 записей в таблице Towns
.
С другой стороны, следующий запрос возвращает полностью те же записи, но его выполнение практически не занимает времени:
SELECT D.ID, C.Name, (SELECT Name FROM Towns WHERE ID = C.Town) AS TownName
FROM Documents D, Companies C
WHERE C.ID = D.Company
ORDER BY C.Name
На мой взгляд, первый запрос должен быть еще быстрее, но я явно ошибаюсь. Кто-нибудь знает, что здесь происходит? Кажется, что индексы игнорируются при сортировке по столбцу в таблице, которая является мастером одного и деталью другого.