0

我听有人说打开case_sensitive_like可以使查询工作更快。如果是这样,如果我们有以下 2 个查询选择不区分大小写的数据,您会怎么想:

  1. SELECT * FROM MyTable WHERE MyColumn LIKE '%Value%'

    假设case_sensitive_like关闭(默认情况下),这将返回相同的结果,无论Valuevalue, vAlue, valUE,...

  2. PRAGMA case_sensitive_like = ON;
    SELECT * FROM MyTable WHERE LOWER(MyColumn) LIKE LOWER('%Value%');

    这也将返回相同的结果,无论Valuevalue, vAlue, valUE, ...

我希望#2优于#1。

请帮忙。谢谢。

PS:我认为可以通过首先使用小写字符串的值为 Value 声明一个常量来提高 #2 的性能,或者可以在传入查询之前对其进行处理(例如在 C# 代码中)。

4

1 回答 1

5

我希望查询 2 会稍微慢一些。

就像关闭“case_sensitive_like”一样,实际上是“LIKE LOWER(%...%)”,但在 LIKE 函数中实现——所以选项 1 在功能上是相同的,但没有调用单独函数的额外开销。

但是,由于大部分时间和资源将用于将数据从磁盘上拖出并在行中定位“MyColumn”,我怀疑差异是否会很明显。

于 2013-04-11T09:48:14.047 回答