1

我想比较文本字段的最后 4 个字符。

性能方面,我应该这样做:

select * from table where col like '%last';

或者

select * from table where substr(col,-4)='last';
4

4 回答 4

2

使用 end-with 通配符时,您将无法利用索引:

          LIKE '%.edu'

另一种方法是将字符串的反转版本存储在另一列中,索引该反向内容列,然后使用 LIKE (或者更好的是,使用 GLOB 函数 [因为在几个 SQLite 实现中 LIKE() 已被覆盖,这也可以防止index use ] 传递您正在查找的字符串的反向版本。例如,如果您正在查找以 .edu 结尾的 URL,您将在反向列中搜索以 'ude.' 开头的值。

于 2011-08-31T20:31:25.453 回答
1

我不知道哪个性能更好,但第一个更好读,我不希望性能有任何显着差异。

于 2011-08-31T19:44:46.610 回答
1

我在查询之前尝试使用EXPLAIN,查看虚拟机操作,具有该substr()功能的具有 3 个 OP 代码比具有LIKE. 这并不意味着它一定会更慢,但它可能是一个迹象。

于 2011-08-31T19:55:40.373 回答
1

优化器概述页面的第 4 节解释说 LIKE 运算符旨在优化 kind 的表达式col LIKE 'something that does not begin with a percent sign%'

于 2011-09-01T11:57:24.510 回答