首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Sqlite3数据库的索引优化

Sqlite3数据库的索引优化
EN

Stack Overflow用户
提问于 2016-02-10 10:21:53
回答 1查看 50关注 0票数 0

我有一个SQLite表t1,它有三列:c1c2c3,它们在(c1,c2)上具有复合索引。我想运行以下查询:

Select max(c2) from t1 where c1=Value and c3 not like "abcd%"

现在,它可以使用复合索引来过滤那些具有匹配值的c1的记录,并应用c3的where条件,然后使用max(c2)选择记录。

或者使用完整的复合索引对所有记录进行c1过滤,匹配值,反向遍历c2 (降序),然后比较where条件。

在我的情况下,第二种方法会更快。

问题是SQLLite如何优化这个查询:第一次还是第二次?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-02-10 12:59:39

SQLite有一个最小/最大优化,但只适用于非常简单的查询。

对于带有WHERE子句的查询,优化器实际上并不知道MAX()函数的行为,因此它被视为任何其他聚合函数,即必须用每个值调用该函数。因此,将只使用索引的第一列。

为了能够使用这两个列,请重写查询以使用c2进行排序:

代码语言:javascript
复制
select c2
from t1
where c1 = Value
  and c3 not like 'abcd%'
order by c2 desc
limit 1;
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/35312477

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档