1

我正在使用非常大的数据库,一些表有超过 30.000.000 个条目,现在我正在使用 mysql,但是对于某些搜索查询,我必须等待超过 1-2 分钟。有什么提高速度的方法吗?另外,没有其他数据库会更快吗?另外,在rails中使用什么?现在我使用简单的%like%,还有其他方法可以通过某个字段进行搜索吗?

4

3 回答 3

5

用于具有那么多行%LIKE%的全文搜索不会产生性能。我强烈推荐使用像Sphinx和优秀的ThinkingSphinx gem 这样的东西。它与 MySQL 和 Rails/ActiveRecord 开箱即用,配置简单。

指南描述了如何将 Sphinx 搜索守护程序安装到特定平台上。

指南描述了如何安装和使用thinking-sphinxgem。(请注意,Rails 2 和 3 有不同的安装指南,因此请确保您遵循正确的安装指南)。

安装后,您可以在您有兴趣搜索的模型的列上定义索引。

Ryan Bates用 ThinkingSphinx 做了一个关于全文搜索的Railscasts 插曲,这是一个很好的开始方式。

快乐编码!

于 2012-06-12T17:41:04.330 回答
1

如果您想坚持使用 mysql,请使用 myisam。

想出一个智能创建索引的策略。

战略性地预先计算复杂的结果。

只返回您需要的数据。

将数据库的部分非规范化以增加性能。

使用许多从站读取

将数据库拆分为多个数据库

您将需要进行很多测试。

于 2012-06-09T18:17:52.647 回答
1

根据 %like%

我遇到了类似的情况,我使用 LIKE 通配符搜索一张大桌子,时间为 3、4 分钟。我能够通过索引列并使用 MATCH() 来解决一些问题,如果您需要准确性,这可能不适用于您的情况。

参考 http://dev.mysql.com/doc/refman//5.5/en/fulltext-search.html

注意:我使用搜索和匹配的组合,您可以在这里查看http://anotherfeed.com/feedmap.php?search=facebook前 50 个结果返回 LIKE,最后 50 个返回 MATCH 并显示 php mysql 的索引分数。前 50 个总是更准确,因为我只是索引标题而不是完整描述。

$query2="SELECT *, MATCH(pagename) AGAINST('".urldecode($_REQUEST['search'])."') AS score FROM anotherfeedv3.af_freefeed WHERE MATCH(pagename) AGAINST('".urldecode($_REQUEST['search'])."') LIMIT $start, $limit";
于 2012-06-09T18:19:59.143 回答