我正在使用非常大的数据库,一些表有超过30.000.000个条目,现在我正在使用mysql,但对于一些搜索查询我必须等待超过1-2分钟。是否有提高速度的方法?此外,是不是任何其他数据库,谁会更快?另外,在铁轨中使用什么?现在我使用简单的%like%,是否可以通过某些字段进行搜索?
答案 0 :(得分:5)
使用%LIKE%
进行全文搜索并使用那么多行不会产生性能。我强烈建议使用类似Sphinx和优秀ThinkingSphinx宝石的东西。它适用于MySQL和Rails / ActiveRecord开箱即用,配置很简单。
This指南介绍了如何将Sphinx搜索守护程序安装到特定平台上。
This指南介绍了如何安装和使用thinking-sphinx
gem。 (请注意,Rails 2和3具有不同的安装指南,因此请确保遵循正确的安装指南。)
安装后,您可以在您要搜索的模型的列上定义索引。
Ryan Bates使用ThinkingSphinx进行全文搜索Railscasts episode,这是一个很好的开始。
快乐的编码!
答案 1 :(得分:1)
如果你想坚持使用mysql,那么请使用myisam。
提出一种智能创建索引的策略。
战略性地预先计算复杂的结果。
仅返回您需要的数据。
将db的部分规范化为incr perf。
使用许多从属设备来读取
将db拆分为多个dbs
你需要经常测试。
答案 2 :(得分:1)
按照%
的百分比我遇到了类似的情况,我使用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";