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) | 不支持 |