SQL:查询条件的主键coloumn为"其中col为NULL"

时间:2015-12-23 13:48:43

标签: mysql sql query-optimization

当某人使用像

这样的查询命中数据库时,sql引擎如何处理查询
select * from table where primary_key_col is NULL

由于主键coloumn不能为空,它会立即返回空行还是尝试点击索引进行搜索

1 个答案:

答案 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,它会立即生效   返回空行或尝试点击索引进行搜索

这可以通过以下解释查询来解释。我有一个表usersidusers是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

因此,优化器在第一次失败后甚至可能无法扫描您的索引表。