加载中...

SARGable 是 Search ARGument able 的缩写,指查询谓词(WHERE 条件)的写法能够被优化器转换为索引查找(index seek)边界。反之,对索引列施加函数、运算或隐式类型转换的条件是 non-SARGable 的,即使列上有索引也只能全扫描后逐行计算。
常见破坏可索引性的写法及改写:WHERE YEAR(create_time)=2024 改为 create_time >= '2024-01-01' AND create_time < '2025-01-01';WHERE amount*1.1 > 100 改为 amount > 100/1.1;LIKE '%关键词%' 前导通配符无法用 B+ 树索引(可考虑全文索引),而 LIKE '关键词%' 可以;字符串列与数字比较引发的隐式转换同样致命,MySQL 中 WHERE phone = 13800000000(phone 为 varchar)即典型案例。
当业务确需按表达式过滤时,可使用函数索引/表达式索引(PostgreSQL、Oracle、MySQL 8.0)或生成列加索引,使表达式本身可索引化。
SARGable 是 SQL 编写层面成本最低、收益最直接的优化原则之一,慢查询审查通常首先检查谓词写法与隐式转换。

登录 后参与讨论
暂无讨论,来发表第一条评论吧