首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >sqlite:我可以/应该索引一个动态生成的子查询吗?

sqlite:我可以/应该索引一个动态生成的子查询吗?
EN

Stack Overflow用户
提问于 2011-03-04 23:47:58
回答 1查看 709关注 0票数 0

在sqlite v3中工作,我有一个查询,它需要一个日历表,本质上是将每月账单扩展为每日账单。尽管我仔细地添加了索引(并使用了解释查询计划),但对于我的需要来说,它还是太慢了。

有关的查询实质上是:

代码语言:javascript
运行
复制
    SELECT stuff
      FROM (<subquery>) AS calendar
INNER JOIN ...
INNER JOIN ...
INNER JOIN ...
  GROUP BY calendar.date

<子查询>是我在某个地方学到的一个巧妙的日历生成技巧:

代码语言:javascript
运行
复制
      SELECT DATE('#{start_time.to_s(:db)}', (d4.digit * 10000 + d3.digit * 1000 + d2.digit * 100 + d1.digit * 10 + d0.digit) || ' DAYS') AS date
      FROM digits AS d0
INNER JOIN digits AS d1
INNER JOIN digits AS d2
INNER JOIN digits AS d3
INNER JOIN digits AS d4
     WHERE (d4.digit * 10000 + d3.digit * 1000 + d2.digit * 100 + d1.digit * 10 + d0.digit) < #{ndays}
  ORDER BY date

(是的,数字表预先加载了数字0.9.它的真正工作方式是留给读者的练习!)

我知道日历子查询速度快(< 50 ms)。但是,在重新读取sqlite时,我了解到calendar.date在外部查询中的组强制在calendar.date上生成索引。因为日历是动态生成的,所以没有索引。

所以,问题总是伴随着问题:

  • 缺乏calendar.date上的索引很可能是影响性能的一个原因吗?(正如我提到的,我在对外部查询中使用的表进行索引时非常小心。)
  • 只创建一个20年的巨型表并对其进行索引,我会更高兴吗?或者有更好的方法?
  • I非常擅长让mysql表现良好。是否有我应该知道的sqlite优化技巧(或陷阱)?

蒂娅..。

EN

回答 1

Stack Overflow用户

发布于 2011-04-18 00:55:19

你知道什么是最棒的吗?将重要的业务数据存储在表中。

Create a calendar table,索引它,填充它的日期,并尝试在您的查询。日历表可能只需要一个日期列。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5200529

复制
相关文章

相似问题

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