Я собираюсь предположить, что у вас гораздо больше пользователей с PlanID
, равным 2, чем с 1.
Это объяснит как изменения в плане exec, так и во время выполнения.HASH MATCH
является наиболее универсальным (и, как правило, наименее эффективным) объединением.По сути, движок создает таблицу, вручную объединяющую все значения.
A NESTED LOOP
проверяет каждое значение слева по отношению к каждому значению справа и хорошо работает, когда один набор данных намного больше другогои обе стороны индексируются.
A HASH MATCH
может быть быстрым, если у вас действительно небольшой набор данных.Я подозреваю, что разница в скорости из-за разного размера наборов данных.Вы можете проверить это довольно просто:
SELECT PlanId, COUNT(*) as CT
FROM User
GROUP BY PlanID
... что даст вам ваш дистрибутив.