0

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

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

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

提前致谢!

编辑:

你好,谢谢你的回复。这是我的查询。

从 PRODUCT_2_CATEGORY、PRODUCT、MERCHANT 中选择 PRODUCT_2_CATEGORY.PRODUCT_ID,其中 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' OR 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' OR CAT_ID='200' OR CAT_ID='91' OR CAT_ID='92' OR CAT_ID='93' OR CAT_ID='94' OR CAT_ID='11' OR CAT_ID='95' OR CAT_ID=' 98' 或 CAT_ID='99' 或 CAT_ID='100' 或 CAT_ID='101' 或 CAT_ID='96' 或 CAT_ID='102' 或 CAT_ID='103' 或 CAT_ID='104' 或 CAT_ID='105' OR CAT_ID='106' OR CAT_ID='97' OR CAT_ID='107' OR CAT_ID='108' OR CAT_ID='109' OR CAT_ID='110' OR CAT_ID='114' OR CAT_ID='119' OR CAT_ID ='120' 或 CAT_ID='121' 或 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' OR CAT_ID='132' OR CAT_ID='136' OR CAT_ID='137' OR 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' 或 CAT_ID='150' 或 CAT_ID='151' 或 CAT_ID='135' 或 CAT_ID ='152' 或 CAT_ID='153' 或 CAT_ID='154' 或 CAT_ID='155' 或 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' 或 CAT_ID='170' 或 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' OR CAT_ID='178' OR CAT_ID=' 162' 或 CAT_ID='179' 或 CAT_ID='180' 或 CAT_ID='181' 或 CAT_ID='182' 或 CAT_ID='183' 或 CAT_ID='163' 或 CAT_ID='184' 或 CAT_ID='192'或 CAT_ID='191' 或 CAT_ID='190' 或 CAT_ID='189' 或 CAT_ID='188' 或 CAT_ID='187' 或 CAT_ID='186' 或 CAT_ID='185' 或 CAT_ID='193' 或 CAT_ID='112' 或 CAT_ID='113' 或 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。当您搜索某些内容时,将执行此查询。

谢谢

4

2 回答 2

1

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

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

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

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

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

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

于 2010-06-17T19:57:53.747 回答
-1

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

我建议您为此使用Sphinx

于 2010-06-17T19:43:39.717 回答