gpt4 book ai didi

sql - MySQL 中的 !col 和 col=false 有什么区别?

转载 作者:可可西里 更新时间:2023-11-01 06:30:10 29 4
gpt4 key购买 nike

这两个语句的性能完全不同:

mysql> explain select * from jobs  where createIndexed=false;
+----+-------------+-------+------+----------------------+----------------------+---------+-------+------+-------+
| id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra |
+----+-------------+-------+------+----------------------+----------------------+---------+-------+------+-------+
| 1 | SIMPLE | jobs | ref | i_jobs_createIndexed | i_jobs_createIndexed | 1 | const | 1 | |
+----+-------------+-------+------+----------------------+----------------------+---------+-------+------+-------+
1 row in set (0.01 sec)

mysql> explain select * from jobs where !createIndexed;
+----+-------------+-------+------+---------------+------+---------+------+-------+-------------+
| id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra |
+----+-------------+-------+------+---------------+------+---------+------+-------+-------------+
| 1 | SIMPLE | jobs | ALL | NULL | NULL | NULL | NULL | 17996 | Using where |
+----+-------------+-------+------+---------------+------+---------+------+-------+-------------+

辅助分析的列定义及相关索引:

createIndexed tinyint(1) NOT NULL DEFAULT 0,
create index i_jobs_createIndexed on jobs(createIndexed);

最佳答案

从逻辑上讲,这些操作是相同的,但是 MySQL 的优化器并不那么聪明,无法在 NOT createIndexed 中看到 createIndexed = 0 .

MySQL 中的

FALSE 只是0 的同义词,TRUE1 的同义词

这个条件不成立:

SELECT  2 = TRUE

--
0

,所以第一个查询只是一个纯索引 refMySQL 知道的 0 的比较,而第二个查询包含更多MySQL 无法表示为可搜索表达式的复杂逻辑。

关于sql - MySQL 中的 !col 和 col=false 有什么区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2517206/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com