问候!
我有以下问题。我有一个包含大量行的表,我需要对其进行搜索,然后按许多参数对搜索结果进行分组。假设这张桌子是
id, big_text, price, country, field1, field2, ..., fieldX
我们运行这样的请求
SELECT .... WHERE
[use FULLTEXT index to MATCH() big_text] AND
[use some random clauses that anyway render indexes useless,
like: country IN (1,2,65,69) and price<100]
我们将其显示为搜索结果,然后我们需要获取这些搜索结果并按多个字段对它们进行分组以生成搜索过滤器
(results) GROUP BY field1
(results) GROUP BY field2
(results) GROUP BY field3
(results) GROUP BY field4
这是我需要的一个简化案例,手头的实际任务更有问题,例如有时第一个结果查询也有它自己的 GROUP BY。这种功能的例子是这个网站 http://www.indeed.com/q-sales-jobs.html (搜索结果加上左侧的过滤器)
我已经完成并且仍在对 MySQL 的功能进行深入研究,此时我完全认为这在 MySQL 中是不可能的。粗略地说,MySQL 表只是位于 HDD 上的一堆行,索引是这些表的微小版本,按索引字段排序并指向实际行。这当然是一种超级简化,但关键是我根本不知道如何解决这个问题,即如何使用多个索引,能够快速进行 GROUP BY-s(当查询到达 GROUP由于范围搜索和其他事情,BY 索引完全没用)。我知道 MySQL(或类似的数据库)有各种有用的东西,比如索引合并、松散的索引扫描等等,但这根本不够——上面的查询仍然需要永远执行。
有人告诉我,这个问题可以通过 NoSQL 来解决,它利用一些全新的方式来存储和处理数据,包括聚合任务。我想知道的是它是如何做到这一点的一些快速的示意图解释。我的意思是我只是想快速浏览一下它,这样我才能真正看到它确实做到了这一点,因为目前我根本不明白怎么可能做到这一点。我的意思是数据仍然是数据并且必须放在内存中,而索引仍然是具有所有限制的索引。如果这确实可行,那么我将开始详细研究 NoSQL。
PS。请不要告诉我去读一本关于 NoSQL 的大书。我已经为 MySQL 做过这个,只是发现它在我的情况下不可用 :) 所以我想在买一本大书之前对这项技术有一些初步的了解。
谢谢!