Я использую SQL Server 2008, и у меня есть две таблицы
Table1
содержит 3,5 миллиона записей
+----+-------------+
| pk | dim1 |
+----+-------------+
indexing applied on column **pk**
Table2
содержит 15 миллионов записей
+----+-------------+
| fk | fact1 |
+----+-------------+
indexing applied on column **fk**
Я выполнил 2 запроса к этой таблице, чтобы получить t2.fact1
Query1
SELECT t2.fact1
FROM Table1 AS t1, Table2 AS t2
WHERE t2.fk = t1.pk
Query2
SELECT t2.fact1
FROM Table1
WHERE t2.fk IN (SELECT t1.pk FROM Table1 AS t1)
Результат, который получил Query1, занял 7 secs
, тогда как Query2 занял 6 secs
В некоторых случаях, когда в блогах, которые я читаю, например, если я использую IN
в запросе, как указано выше, запрос будет медленнее.
Вопрос № 1: Кто-нибудь может подсказать, почему Query2 был быстрее?
В другом эксперименте с той же таблицей (когда не применялось INDEXING) я выполнял запросы выше, и снова query2 был быстрее, чем Query1, к сожалению, не помню его время.
Вопрос № 2: Кто-нибудь может подсказать, почему Query2 был быстрее?