2017-09-20 57 views
0

我需要查询满足多个过滤条件的COUNT行。但是,我不知道哪些过滤器将被合并,因此我无法创建适当的索引。对两个“未知”列的总和的sql查询计数

SELECT COUNT(id) FROM tbl WHERE filterA > 1000 AND filterD < 500 

这是非常慢,因为它必须做一个全表扫描。有什么办法可以在我的情况下进行perfomant查询吗?

id, filterA, filterB, filterC, filterD, filterE 
    1, 2394, 23240, 8543, 3241, 234, 23 
+0

不是。多行不等式不是SQL强项。 –

+0

@GordonLinoff会有什么替代?我认为NoSQL对索引也有相同的限制。 ElasticSearch也许? – Chris

+0

。 。 R-Tree索引结构可以处理这种类型的查询(请参阅https://en.wikipedia.org/wiki/R-tree)。我不确定哪种工具具有通用的内置方式。它们通常用于地理搜索。 –

回答

0

这里的问题是如何在多个标准上索引数据有一定的限制。这些都是标准的基本问题,并且就ElasticSearch能够摆脱这些问题而言,它只是强力并行和对您可能想过滤的所有内容的索引。

通常,一些过滤器会更常用并且更具选择性,因此通常可以从查看实际示例开始,并围绕在过去缓慢执行的查询构建索引。

这意味着您先从慢查询日志记录开始,然后将注意力集中在最重要的查询上,直到您获得所有可以容忍的地方。