14.1.3 等价谓词重写
MySQL镇南关一些常见的等价谓词重写规则。具体情况参见表14-2。
表14-2 MySQL支持等价谓词重写对照表
规则 |
谓词原型 |
转换后的谓词形式 |
支持 |
LIKE规则 |
name LIKE 'abc%' |
`test`.`test_like`.`name` like 'abc%' |
不支持 |
BETWEEN和AND规则 |
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) |
不支持 |