MySQL查询优化器--逻辑查询优化技术(七)--等价谓词重写

本文介绍了MySQL中常见的等价谓词重写规则,包括LIKE、BETWEEN AND、IN、OR、ALL/ANY及NOT等谓词的转换形式,并指出了哪些规则被MySQL所支持。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

14.1.3 等价谓词重写

MySQL镇南关一些常见的等价谓词重写规则。具体情况参见表14-2

 

14-2 MySQL支持等价谓词重写对照表

规则

谓词原型

转换后的谓词形式

支持

LIKE规则

name LIKE 'abc%'

`test`.`test_like`.`name` like 'abc%'

不支持

BETWEENAND规则

BETWEEN 10 AND 20

`test`.`test_like`.`sno` between 10 and 20

不支持

IN转换OR规则

age IN (8,12)

`test`.`test_like`.`age` in (8,12)

不支持

IN转换ANY规则

age IN (8,12,21)

`test`.`test_like`.`age` in (8,12,21)

支持

OR转换ANY规则

age=8 OR age=12 OR age=21

(`test`.`test_like`.`age` = 8) or (`test`.`test_like`.`age` = 12) or (`test`.`test_like`.`age` = 21))

不支持

ALL/ANY转换集函数规则

sno > ANY (10,2*5+3,sqrt(9))

语法不支持

不支持

NOT规则

NOT(age!=8) OR

NOT(age!=sno) OR

NOT(age=sno) OR

NOT(age<sno) OR

NOT(age>sno)

(`test`.`test_like`.`age` = 8)

(`test`.`test_like`.`sno` = `test`.`test_like`.`age`)

(`test`.`test_like`.`age` <> `test`.`test_like`.`sno`)

(`test`.`test_like`.`age` >= `test`.`test_like`.`sno`)

(`test`.`test_like`.`age` <= `test`.`test_like`.`sno`)

支持

OR重写并集规则

(name='abc' and age>15) OR age>18

((`test`.`test_like`.`name` = 'abc') and

(`test`.`test_like`.`age` > 15)) or

(`test`.`test_like`.`age` > 18)

不支持

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值