在MySQL中is null, is not null对索引的影响【测试】

在MySQL中is null, is not null对索引的影响【测试】,第1张

一、索引字段不为null

使用select *查询

select * from a_user where name is null

查询索引字段

select name from a_user where name is null

select name from a_user where name is not null

结果

select name from a_user where name is null未使用索引;

select name from a_user where name is not null使用索引;

多字段查询(索引字段+非索引字段)

select name,sex from a_user where name is null

select name,sex from a_user where name is not null

结果

select name,sex from a_user where name is null未使用索引;

select name,sex from a_user where name is not null未使用索引;

二、索引字段为null 时

使用select *查询

select * from b_user where name is null

select * from b_user where name is not null

结果:

select * from b_user where name is null使用索引

select * from b_user where name is not null未使用索引

查询索引字段

select name from b_user where name is null

select name from b_user where name is not null

结果:

select name from b_user where name is null使用索引

select name from b_user where name is not null使用索引

多字段查询(索引字段+非索引字段)

select name,sex from b_user where name is null

select name,sex from b_user where name is not null

结果:

select name,sex from b_user where name is null使用索引

select name,sex from b_user where name is not null未使用索引

总结以上测试:

1、当索引字段不为null 时,只有使用is not null 返回的结果集中只包含索引字段时,才使用索引;

2、当索引字段为null时候,使用 is null 不影响覆盖索引,但是使用 is not null 只有完全返回索引字段时才会使用索引

今天用到了MySql里的isnull才发现他和MSSQL里的还是有点区别,现在简单总结一下:

mysql中isnull,ifnull,nullif的用法如下:

isnull(expr)

的用法:

如expr

为null,那么isnull()

的返回值为

1,否则返回值为

0。

mysql>

select

isnull(1+1)

->

0

mysql>

select

isnull(1/0)

->

1

使用=

的null

值对比通常是错误的。

isnull()

函数同

is

null比较 *** 作符具有一些相同的特性。请参见有关is

null

的说明。

IFNULL(expr1,expr2)的用法:

假如expr1

不为

NULL,则

IFNULL()

的返回值为

expr1

否则其返回值为

expr2。IFNULL()的返回值是数字或是字符串,具体情况取决于其所使用的语境。

mysql>

SELECT

IFNULL(1,0)

->

1

mysql>

SELECT

IFNULL(NULL,10)

->

10

mysql>

SELECT

IFNULL(1/0,10)

->

10

mysql>

SELECT

IFNULL(1/0,'yes')

->

'yes'

IFNULL(expr1,expr2)的默认结果值为两个表达式中更加“通用”的一个,顺序为STRING、

REAL或

INTEGER。假设一个基于表达式的表的情况,

或MySQL必须在内存储器中储存一个临时表中IFNULL()的返回值:

CREATE

TABLE

tmp

SELECT

IFNULL(1,'test')

AS

test;

在这个例子中,测试列的类型为

CHAR(4)。

NULLIF(expr1,expr2)

的用法:

如果expr1

=

expr2

成立,那么返回值为NULL,否则返回值为

expr1。这和CASE

WHEN

expr1

=

expr2

THEN

NULL

ELSE

expr1

END相同。

mysql>

SELECT

NULLIF(1,1)

->

NULL

mysql>

SELECT

NULLIF(1,2)

->

1

如果参数不相等,则

MySQL

两次求得的值为

expr1

以上所述是小编给大家介绍的MySql中的IFNULL、NULLIF和ISNULL用法详解,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对脚本之家网站的支持!


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/6148654.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-03-16
下一篇 2023-03-16

发表评论

登录后才能评论

评论列表(0条)

保存