我的客户有一个庞大的数据库,只包含三个字段:
这个数据库已经有超过几十亿个条目。我以前没有处理如此大量数据的经验。
他希望我使用AJAX(如Google)设计一个界面来搜索这个数据库。我的疑问和乌龟一样慢。
在这么大的数据库中搜索文本字段的最佳方法是什么?如果用户在界面上键入错误的拼写,我该如何返回他想要的内容?
答案 0 :(得分:7)
如果您正在使用FULLTEXT索引,那么您正确地编写了查询,并且返回结果的速度不够,您正在进入MySQL可能根本不适合您的领域..
您可以能够调整设置,购买足够的RAM以确保您的整个数据集在内存中100%适合。在那里,性能提升可能是巨大的。
我绝对建议您调查一下mysql配置。我们过去曾经有过一些愚蠢的环境。操作系统默认设置非常糟糕!
但是,如果您在那时遇到麻烦,可以:
答案 1 :(得分:0)
你做不到。您的方案中唯一的快速搜索将在主键上,因为这最有可能是索引。文字搜索比乌龟慢。
严肃地说,你有几个解决方案:
如果你必须坚持使用NoSQL,你将不得不重新设计你的计划。在不知道要求的情况下很难给你一个好的推荐。一种解决方案是在单独的表中索引关键字。
另一个解决方案是切换到其他搜索引擎,您可以在此处找到其他问题的建议,例如:Fast SQL Server search on 40M text records
答案 2 :(得分:0)
如果您的表是myISAM,那么您可以将名称和描述字段设置为FULLTEXT
CREATE TABLE articles (
id INT UNSIGNED AUTO_INCREMENT NOT NULL PRIMARY KEY,
Name VARCHAR(200),
Description TEXT,
FULLTEXT (Name,Description)
);
然后您可以使用以下查询:
SELECT * FROM articles
WHERE MATCH (Name,Description) AGAINST ('database');
您可以在http://docs.oracle.com/cd/E17952_01/refman-5.0-en/fulltext-search.html
找到更多信息在执行上述任何操作之前,您可能需要备份(或至少复制一份)数据库。