Spec-Zone.ru › MySQL 8.4

10.2.1.15 Оптимизация IS NULL

MySQL может выполнить ту же оптимизацию на col_name IS NULL, что и для col_name = constant_value. Например, MySQL может использовать индексы и диапазоны для поиска NULL с IS NULL.

Примеры:

SELECT * FROM tbl_name WHERE key_col IS NULL;

SELECT * FROM tbl_name WHERE key_col <=> NULL;

SELECT * FROM tbl_name
  WHERE key_col=const1 OR key_col=const2 OR key_col IS NULL;

Если в условии WHERE содержится условие col_name IS NULL для столбца, объявленного как NOT NULL, это выражение оптимизируется. Данная оптимизация не происходит в случаях, когда столбец может произвести NULL (например, если он берётся из таблицы справа от LEFT JOIN).

MySQL также может оптимизировать сочетание col_name = expr OR col_name IS NULL, форма, которая часто встречается в разрешённых подзапросах. EXPLAIN демонстрирует ref_or_null при использовании этой оптимизации.

Эта оптимизация может обрабатывать одно IS NULL для любой части ключа.

Некоторые примеры запросов, которые оптимизируются, предполагая, что существует индекс по столбцам a и b таблицы t2:

SELECT * FROM t1 WHERE t1.a=expr OR t1.a IS NULL;

SELECT * FROM t1, t2 WHERE t1.a=t2.a OR t2.a IS NULL;

SELECT * FROM t1, t2
  WHERE (t1.a=t2.a OR t2.a IS NULL) AND t2.b=t1.b;

SELECT * FROM t1, t2
  WHERE t1.a=t2.a AND (t2.b=t1.b OR t2.b IS NULL);

SELECT * FROM t1, t2
  WHERE (t1.a=t2.a AND t2.a IS NULL AND ...)
  OR (t1.a=t2.a AND t2.a IS NULL AND ...);

ref_or_null работает, сначала выполняя чтение по ключу-ссылке, а затем отдельный поиск строк со значением ключа-ссылки NULL.

Оптимизация может обрабатывать только один уровень IS NULL. В следующем запросе MySQL использует поиск по ключу только для выражения (t1.a=t2.a AND t2.a IS NULL) и не может использовать часть ключа по b:

SELECT * FROM t1, t2
  WHERE (t1.a=t2.a AND t2.a IS NULL)
  OR (t1.b=t2.b AND t2.b IS NULL);

© 2025 Oracle
Licensed under the GPLv2 License.
https://docs.oracle.com/cd/E17952_01/mysql-8.4-en/is-null-optimization.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API