【问题标题】:FULLTEXT search(Mysql) is slow for the first time and then from second time onwards it gets much fasterFULLTEXT 搜索(Mysql)第一次很慢,然后从第二次开始它变得更快
【发布时间】:2010-06-17 19:11:57
【问题描述】:

我有一个包含 4000 条记录的表(通过全文搜索更容易处理)。当第一次执行搜索查询时,速度要慢得多。大约需要 5 到 10 秒。然后它变得更快。如果网站在 10 或 15 分钟内保持不活动状态,并且当我尝试再次执行查询时,它会变慢。

我正在使用 mysql+PHP。我想这是缓存问题。我们的网站托管在我无法访问缓存的第三方服务器中。

我的问题有什么解决方法吗?

提前致谢!

编辑:

嗨, 感谢您的回复。这是我的查询。

SELECT PRODUCT_2_CATEGORY.PRODUCT_ID FROM PRODUCT_2_CATEGORY, PRODUCT, MERCHANT WHERE PRODUCT_2_CATEGORY.PRODUCT_ID = PRODUCT.ID AND PRODUCT.PRO_STATUS='active' AND PRODUCT.MERCHANT_ID = MERCHANT.ID AND MERCHANT.M_STATUS='active' AND (CAT_ID=' 1' OR CAT_ID='1004' OR CAT_ID='1005' OR CAT_ID='1006' OR CAT_ID='1007' OR CAT_ID='1008' OR CAT_ID='1002' OR CAT_ID='1003' OR CAT_ID='45'或 CAT_ID='46' 或 CAT_ID='74' 或 CAT_ID='75' 或 CAT_ID='76' 或 CAT_ID='49' 或 CAT_ID='50' 或 CAT_ID='77' 或 CAT_ID='78' 或 CAT_ID ='79' OR CAT_ID='80' OR CAT_ID='81' OR CAT_ID='82' OR CAT_ID='83' OR CAT_ID='84' OR CAT_ID='47' OR CAT_ID='89' OR CAT_ID=' 51' 或 CAT_ID='52' 或 CAT_ID='88' 或 CAT_ID='87' 或 CAT_ID='86' 或 CAT_ID='85' 或 CAT_ID='48' 或 CAT_ID='53' 或 CAT_ID='54'或 CAT_ID='90' 或 CAT_ID='200' 或 CAT_ID='91' 或 CAT_ID='92' 或 CAT_ID='93' 或 CAT_ID='94' 或 CAT_ID='11' 或 CAT_ID='95' 或 CAT_ID ='98' OR CAT_ID='99' OR CAT_ID='100' OR CAT_ID='101' OR CAT_ID='96' OR CAT_ID='102' OR CAT_ID='103' OR CAT_ID=' 104' 或 CAT_ID='105' 或 CAT_ID='106' 或 CAT_ID='97' 或 CAT_ID='107' 或 CAT_ID='108' 或 CAT_ID='109' 或 CAT_ID='110' 或 CAT_ID='114' OR CAT_ID='119' OR CAT_ID='120' OR CAT_ID='121' OR CAT_ID='115' OR CAT_ID='122' OR CAT_ID='123' OR CAT_ID='124' OR CAT_ID='125' OR CAT_ID ='116' OR CAT_ID='127' OR CAT_ID='128' OR CAT_ID='129' OR CAT_ID='117' OR CAT_ID='130' OR CAT_ID='131' OR CAT_ID='118' OR CAT_ID=' 111' 或 CAT_ID='132' 或 CAT_ID='136' 或 CAT_ID='137' 或 CAT_ID='138' 或 CAT_ID='139' 或 CAT_ID='140' 或 CAT_ID='133' 或 CAT_ID='141'或 CAT_ID='142' 或 CAT_ID='143' 或 CAT_ID='144' 或 CAT_ID='145' 或 CAT_ID='146' 或 CAT_ID='134' 或 CAT_ID='147' 或 CAT_ID='148' 或 CAT_ID ='149' OR CAT_ID='150' OR CAT_ID='151' OR CAT_ID='135' OR CAT_ID='152' OR CAT_ID='153' OR CAT_ID='154' OR CAT_ID='155' OR CAT_ID=' 156' 或 CAT_ID='64' 或 CAT_ID='158' 或 CAT_ID='70' 或 CAT_ID='164' 或 CAT_ID='71' 或 CAT_ID='165' 或 CAT_ID='159' 或 CAT_ID='166'或 CAT_ID='167' 或 CAT_ID='168' 或 CAT_ID='169' 或 CAT_ID='160' 或 CAT_ ID='73' OR CAT_ID='170' OR CAT_ID='172' OR CAT_ID='173' OR CAT_ID='174' OR CAT_ID='161' OR CAT_ID='175' OR CAT_ID='176' OR CAT_ID= '177' 或 CAT_ID='178' 或 CAT_ID='162' 或 CAT_ID='179' 或 CAT_ID='180' 或 CAT_ID='181' 或 CAT_ID='182' 或 CAT_ID='183' 或 CAT_ID='163 ' OR CAT_ID='184' OR CAT_ID='192' OR CAT_ID='191' OR CAT_ID='190' OR CAT_ID='189' OR CAT_ID='188' OR CAT_ID='187' OR CAT_ID='186' OR CAT_ID='185' OR CAT_ID='193' OR CAT_ID='112' OR CAT_ID='113' OR CAT_ID='65' OR CAT_ID='66' OR CAT_ID='67' OR CAT_ID='68' OR CAT_ID= '69') AND MATCH(PRODUCT.TITLE) AGAINST('shirt' IN BOOLEAN MODE) ORDER BY PRODUCT.TITLE ASC LIMIT 0, 12

我们的网站托管在第三方网络服务器(Plesk 控制面板)上。所以,我不确定是否可以安装其他软件。

我们的网站是 2010.shoppingstrip.com.au。当您搜索某些东西时,将执行此查询。

谢谢

【问题讨论】:

    标签: php mysql full-text-indexing


    【解决方案1】:

    为您的表格编制索引可以产生巨大的影响。在最近一项在 MySql 数据库中有 150 万条记录的工作中,一个带有连接的基本查询需要 35 分钟以上。索引表后(大约需要 3-4 分钟),查询在 4 秒内执行。

    还应检查查询是否有任何可能的改进。例如,外来连接可以显着延长查询。此外,一次运行过多的 foreach 循环来获取记录可能会导致过多的延迟。根据您的具体情况,您可以优化查询以仅搜索特定的基本元素以获得更好的性能。

    要测试您的查询,请在您的本地计算机上放置 WAMP 服务器的副本。导入脚本和数据库,并运行一些测试。这可以确定您的查询是效率低下还是问题出在服务器上。

    考虑您使用的搜索方法。例如,可以使用“LIKE”、“=”、“REGEXP”等运算符来在 mysql 中查找值。尝试提高性能并减少加载时间。

    最后,如果一切都失败了,您可以求助于缓存解决方案或更强大的数据库托管。 4,000 条记录在宏伟的计划中并不是很大,您不应该遇到如此缓慢的加载时间。通过 Zend 框架的内置缓存系统,我在缓存方面很幸运。

    如果您仍然一无所获,请发布您的查询示例,我们可以去镇上!

    【讨论】:

    • 即使有索引,MySQL 也没有那么好。 LuceneSphinxMySQL 有一个数量级的改进。仍然应该注意的是,在最近的版本中,MySQL 对全文搜索的支持和性能有了很大的提高。请参阅此演讲以进行更深入的讨论:slideshare.net/billkarwin/…
    • 我已经编辑了我的问题以提供我正在使用的查询。谢谢!
    【解决方案2】:

    MySQL 在全文搜索方面确实很糟糕,无论是在性能方面还是在易用性方面。

    我建议您为此使用 Sphinx

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-03-24
    • 1970-01-01
    • 2011-03-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多