Недавно я изменил все мои условия использования <=>
вместо =
, потому что мне нужно проверить, не null. Есть ли проблемы с производительностью?
Есть ли разница в производительности между `=` и `<=>`?
Ответ 1
Нет никакого реального влияния на производительность здесь - это тест, который нужно проверить для себя
mysql> SELECT BENCHMARK(1000000, (SELECT SQL_NO_CACHE userId FROM Activity WHERE userId<=>42459204 LIMIT 1));
Убедитесь, что вам нужно использовать <= >
NULL-безопасно. Этот оператор выполняет сравнение равенства оператор =, но возвращает 1 скорее чем NULL, если оба операнда NULL, и 0 вместо NULL, если один операнд имеет значение NULL.
Если вам просто нужно проверить rvalue do
col = CONST AND CONST NOT NULL
или t1.col = t2.col
Ответ 2
<=>
- это в основном ярлык для включения OR (Val1 IS NULL AND Val2 IS NULL)
или IS NOT DISTINCT FROM
Это дополнительная операция, но разница должна быть незначительной , если вы SELECT
сопоставляете данные, потому что иначе первая SELECT
возвращающая NULL
не должна выполняться второй SELECT
, потому что стандартный оператор равенства =
всегда будет давать false.
Как отметил @Dathan, убедитесь, что это действительно когда вы намереваетесь сделать.