【发布时间】:2011-01-17 16:02:53
【问题描述】:
我有一个想法我还没有实现,因为我担心我可能会找错树...主要是因为谷歌搜索该主题返回的结果太少。
基本上,我有一些很慢的 SQL 查询,很大程度上是因为它们的子查询很耗时。例如,他们可能会做一些事情,比如“给我数一下所有 10 到 15 岁男孩骑过的红色自行车”。这很昂贵,因为它会在所有自行车中晃动,但最终结果是一个数字。而且,就我而言,我真的不需要这个数字是 100% 最新的。
此类问题的最终解决方案似乎是应用基于 OLAP 的引擎来预缓存这些排列。但是,就我而言,我并没有真正尝试围绕大量指标对数据进行切片和切块,而且我希望不必再运行另一个进程/数据存储使我的架构复杂化。
所以...我的想法基本上是在数据库中记住这些子查询。我可能有一个名为“BicycleStatistics”的表,它可能会将上面那个子查询的输出存储为它的输入和输出的名称值对。
Ex 名称:“c_red_g_male_a_10-15”值:235
并且有一种机制可以在查询运行时将这些值记忆到该表中。
有没有人遇到过这种情况并尝试过类似的事情?我认为这样的解决方案比“在数据库中投入大量 RAM 并让数据库处理它”更有价值的原因是(A)我的数据库大于我可以方便地投入它的 RAM 量,并且( B) 数据库将确保我获得这些统计数据的准确数字,而我最大的胜利是,我可以接受这些数字已经过时一两天了。
感谢您的任何想法/反馈。
汤姆
【问题讨论】:
-
您是否查看过查询计划以了解您的查询为何如此缓慢?可能是您使用了低效的方法,例如相关子查询而不是 JOIN,或者您在某处缺少索引。
-
“此类问题的最终解决方案” - 首先检查您是否拥有适合查询工作负载的索引
-
确实,我花了很多时间确保查询完全使用索引。我在上面使用的例子有点做作,但就我而言,就好像我有几百万辆自行车......我正在努力让它扩大规模,以便它可以每秒运行几次。
标签: database database-design memoization rolap