我想比较文本字段的最后 4 个字符。
性能方面,我应该这样做:
select * from table where col like '%last';
或者
select * from table where substr(col,-4)='last';
使用 end-with 通配符时,您将无法利用索引:
LIKE '%.edu'
另一种方法是将字符串的反转版本存储在另一列中,索引该反向内容列,然后使用 LIKE (或者更好的是,使用 GLOB 函数 [因为在几个 SQLite 实现中 LIKE() 已被覆盖,这也可以防止index use ] 传递您正在查找的字符串的反向版本。例如,如果您正在查找以 .edu 结尾的 URL,您将在反向列中搜索以 'ude.' 开头的值。
我不知道哪个性能更好,但第一个更好读,我不希望性能有任何显着差异。
我在查询之前尝试使用EXPLAIN
,查看虚拟机操作,具有该substr()
功能的具有 3 个 OP 代码比具有LIKE
. 这并不意味着它一定会更慢,但它可能是一个迹象。
优化器概述页面的第 4 节解释说 LIKE 运算符旨在优化 kind 的表达式col LIKE 'something that does not begin with a percent sign%'
。