我正在使用非常大的数据库,一些表有超过 30.000.000 个条目,现在我正在使用 mysql,但是对于某些搜索查询,我必须等待超过 1-2 分钟。有什么提高速度的方法吗?另外,没有其他数据库会更快吗?另外,在rails中使用什么?现在我使用简单的%like%,还有其他方法可以通过某个字段进行搜索吗?
3 回答
用于具有那么多行%LIKE%
的全文搜索不会产生性能。我强烈推荐使用像Sphinx和优秀的ThinkingSphinx gem 这样的东西。它与 MySQL 和 Rails/ActiveRecord 开箱即用,配置简单。
本指南描述了如何将 Sphinx 搜索守护程序安装到特定平台上。
本指南描述了如何安装和使用thinking-sphinx
gem。(请注意,Rails 2 和 3 有不同的安装指南,因此请确保您遵循正确的安装指南)。
安装后,您可以在您有兴趣搜索的模型的列上定义索引。
Ryan Bates用 ThinkingSphinx 做了一个关于全文搜索的Railscasts 插曲,这是一个很好的开始方式。
快乐编码!
如果您想坚持使用 mysql,请使用 myisam。
想出一个智能创建索引的策略。
战略性地预先计算复杂的结果。
只返回您需要的数据。
将数据库的部分非规范化以增加性能。
使用许多从站读取
将数据库拆分为多个数据库
您将需要进行很多测试。
根据 %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";