我想知道哪个更快?
SELECT * FROM `table` WHERE `is_deleted` = false;
要么
SELECT * FROM `table` WHERE NOT `is_deleted`
谢谢
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 | +----------+
我们现在有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 | +----+-------------+-------+------+---------------+------+---------+-------+---------+-------------+
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 | +----+-------------+-------+-------+---------------+------+---------+------+---------+--------------------------+
因此A
它更快,因为它能够使用本机数据类型(如在具有它的索引中所见),并且由于B
处理数据转换的方式(并且确实导致表扫描)而不强制进行表扫描
它的证明在explain
输出中,具有rows
确定答案所需的数量,并且ref
即使在两个查询的列上也没有使用索引(列).
解释语法的 Mysql手册页.