Spec-Zone .ru
спецификации, руководства, описания, API
|
MySQL может выполнить ту же самую оптимизацию на col_name
IS NULL
то, что это
может использовать для col_name
=
constant_value
. Например, MySQL может использовать, индексирует и
располагается, чтобы искать NULL
с IS NULL
.
Примеры:
SELECT * FROMtbl_name
WHEREkey_col
IS NULL;SELECT * FROMtbl_name
WHEREkey_col
<=> NULL;SELECT * FROMtbl_name
WHEREkey_col
=const1
ORkey_col
=const2
ORkey_col
IS NULL;
Если a WHERE
пункт включает a col_name
IS NULL
условие для
столбца, который объявляется как NOT NULL
, то выражение оптимизируется далеко. Эта
оптимизация не происходит в случаях, когда столбец мог бы произвести NULL
так или
иначе; например, если это прибывает из таблицы на правой стороне a LEFT JOIN
.
MySQL может также оптимизировать комбинацию
, форма, которая распространена в разрешенных подзапросах. col_name
= expr
OR col_name
IS
NULLEXPLAIN
шоу 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
работы
первым выполнением чтения на ссылочном ключе, и затем отдельного поиска строк с a 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);