当某人使用像
这样的查询命中数据库时,sql引擎如何处理查询select * from table where primary_key_col is NULL
由于主键coloumn不能为空,它会立即返回空行还是尝试点击索引进行搜索
答案 0 :(得分:2)
primary_key_col=NULL
无法使用,因为您无法使用=运算符比较null,您需要使用is null
select * from table where primary_key_col is null
http://dev.mysql.com/doc/refman/5.7/en/working-with-null.html
更新:我错误引用了问题
由于主键coloumn不能为null,它会立即生效 返回空行或尝试点击索引进行搜索
这可以通过以下解释查询来解释。我有一个表users
和idusers
是PK自动递增(mysql 5.6)
现在让我们运行解释并查看
mysql> explain select * from users where idusers is null ;
+----+-------------+-------+------+---------------+------+---------+------+------+------------------+
| id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra |
+----+-------------+-------+------+---------------+------+---------+------+------+------------------+
| 1 | SIMPLE | NULL | NULL | NULL | NULL | NULL | NULL | NULL | Impossible WHERE |
+----+-------------+-------+------+---------------+------+---------+------+------+------------------+
1 row in set (0.01 sec)
你可以看到它给你impossible where
http://dev.mysql.com/doc/refman/5.5/en/explain-output.html
MySQL已经读取了所有const(和系统)表并注意到了WHERE 子句总是错误的。
http://dev.mysql.com/doc/refman/5.5/en/explain-output.html#jointype_const
因此,优化器在第一次失败后甚至可能无法扫描您的索引表。