Что может сделать одну таблицу существенно медленнее другой?Вероятно, проще всего это проиллюстрировать:
Запрос 1:
select top 1000 *
from call c
JOIN call_task ct ON c.call_no=ct.call_no
LEFT JOIN memo_clt m ON m.doc_ref=ct.record AND m.doc_type='CLT' AND m.line_no=1
LEFT JOIN memo_clt m2 ON m2.doc_ref=ct.record AND m2.doc_type='CLT' AND m2.line_no=2
Запрос 2:
select top 1000 *
from call c
LEFT JOIN ext_document_detail edd ON edd.doc_type='CLH'
AND edd.doc_ext_no=21
AND edd.doc_ref=c.record
LEFT JOIN ext_document_detail edSource ON edSource.doc_type='CLH'
AND edSource.doc_ext_no=22
AND edSource.doc_ref=c.record
Структура таблиц аналогична, и я обращаюсь кext_document_detail с очень похожим соединением по сравнению с таблицей memo_clt.И все же второй запрос занимает 40 секунд, а второй - 0 секунд.
Оба имеют кластерный индекс по трем ключам, которые я использую для объединения.Таблица memo_clt имеет некластеризованный индекс в своем столбце записи, хотя ... это единственное отличие, которое я могу заметить, и я не думаю, что это будет иметь большое значение.
Так почему разница в скорости здесь?
РЕДАКТИРОВАТЬ: Поскольку Мартин спросил, вот результаты SET STATISTICS IO ON Query 1:
Table 'memo_clt'. Scan count 2000, logical reads 6454, physical reads 0, read-ahead reads 0, lob logical reads 2385, lob physical reads 0, lob read-ahead reads 0.
Table 'call_task'. Scan count 1, logical reads 39, physical reads 0, read-ahead reads 0, lob logical reads 0, lob physical reads 0, lob read-ahead reads 0.
Table 'call'. Scan count 1, logical reads 25, physical reads 0, read-ahead reads 0, lob logical reads 0, lob physical reads 0, lob read-ahead reads 0.
Query 2:
Table 'Worktable'. Scan count 0, logical reads 0, physical reads 0, read-ahead reads 0, lob logical reads 0, lob physical reads 0, lob read-ahead reads 0.
Table 'ext_document_detail'. Scan count 1001, logical reads 1507004, physical reads 0, read-ahead reads 0, lob logical reads 0, lob physical reads 0, lob read-ahead reads 0.
Table 'call'. Scan count 1, logical reads 24, physical reads 0, read-ahead reads 0, lob logical reads 0, lob physical reads 0, lob read-ahead reads 0.
С самого началадве вещи поражают меня.Во-первых, нет такой таблицы, как «Рабочий стол».Второе - это огромное количество логических операций чтения ... что может вызвать это?