zer*_*r09 4 mysql boolean where-clause
我想知道哪个更快?
SELECT * FROM `table` WHERE `is_deleted` = false;
Run Code Online (Sandbox Code Playgroud)
要么
SELECT * FROM `table` WHERE NOT `is_deleted`
Run Code Online (Sandbox Code Playgroud)
谢谢
小智 5
SELECT*FROM table
WHERE NOTis_deleted
此查询将为您提供更快更合适的结果.
因为在Mysql中更好地使用Not运算符来表示布尔数据类型.
create table t123
(
id int auto_increment primary key,
x boolean not null,
key(x)
);
truncate table t123;
insert t123(x) values (false),(true),(false),(true),(false),(true),(false),(true),(false),(true),(false),(true);
insert t123(x) select (x) from t123;
insert t123(x) select (x) from t123;
insert t123(x) select (x) from t123;
insert t123(x) select (x) from t123;
insert t123(x) select (x) from t123;
insert t123(x) select (x) from t123;
insert t123(x) select (x) from t123;
insert t123(x) select (x) from t123;
insert t123(x) select (x) from t123;
insert t123(x) select (x) from t123;
insert t123(x) select (x) from t123;
insert t123(x) select (x) from t123;
insert t123(x) select (x) from t123;
insert t123(x) select (x) from t123;
insert t123(x) select (x) from t123;
insert t123(x) select (x) from t123;
insert t123(x) select (x) from t123;
insert t123(x) select (x) from t123;
select count(*) as rowCount from t123;
+----------+
| rowCount |
+----------+
| 3145728 |
+----------+
Run Code Online (Sandbox Code Playgroud)
我们现在有3.1M行.
explain SELECT * FROM t123 WHERE x=false;
+----+-------------+-------+------+---------------+------+---------+-------+---------+-------------+
| id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra |
+----+-------------+-------+------+---------------+------+---------+-------+---------+-------------+
| 1 | SIMPLE | t123 | ref | x | x | 1 | const | 1570707 | Using index |
+----+-------------+-------+------+---------------+------+---------+-------+---------+-------------+
Run Code Online (Sandbox Code Playgroud)
explain SELECT * FROM t123 WHERE NOT `x`;
+----+-------------+-------+-------+---------------+------+---------+------+---------+--------------------------+
| id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra |
+----+-------------+-------+-------+---------------+------+---------+------+---------+--------------------------+
| 1 | SIMPLE | t123 | index | NULL | x | 1 | NULL | 3141414 | Using where; Using index |
+----+-------------+-------+-------+---------------+------+---------+------+---------+--------------------------+
Run Code Online (Sandbox Code Playgroud)
因此A
它更快,因为它能够使用本机数据类型(如在具有它的索引中所见),并且由于B
处理数据转换的方式(并且确实导致表扫描)而不强制进行表扫描
它的证明在explain
输出中,具有rows
确定答案所需的数量,并且ref
即使在两个查询的列上也没有使用索引(列).
解释语法的 Mysql手册页.
归档时间: |
|
查看次数: |
7112 次 |
最近记录: |