FULLTEXT搜索(Mysql)第一次很慢,然后从第二次起,它变得更快

时间:2010-06-17 19:11:58

标签: php mysql full-text-indexing

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

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

我的问题是否有解决方法。

提前致谢!

编辑:

您好,    感谢您的回复。这是我的询问。

选择PRODUCT_2_CATEGORY.PRODUCT_ID FROM PRODUCT_2_CATEGORY,PRODUCT,MERCHANT WHERE PRODUCT_2_CATEGORY.PRODUCT_ID = PRODUCT.ID AND PRODUCT.PRO_STATUS = '活性' AND PRODUCT.MERCHANT_ID = MERCHANT.ID AND MERCHANT.M_STATUS = '活性' 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' OR CAT_ID = '74' OR CAT_ID = '75' OR CAT_ID = '76' OR CAT_ID = '49' OR CAT_ID = '50' OR CAT_ID = '77' OR CAT_ID = '78' OR CAT_ID ='79'或CAT_ID ='80'或CAT_ID ='81'或CAT_ID ='82'或CAT_ID ='83'或CAT_ID ='84'或CAT_ID ='47'或CAT_ID ='89'或CAT_ID =' 51'OR CAT_ID ='52'或CAT_ID ='88'或CAT_ID = '87'或CAT_ID ='86'或CAT_ID ='85'或CAT_ID ='48'或CAT_ID ='53'或CAT_ID ='54' OR 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'或CAT_ID ='106'或CAT_ID ='97'或CAT_ID ='107'或CAT_ID ='108'或CAT_ID ='109'或CAT_ID ='110'或CAT_ID ='114'或CAT_ID ='119'或CAT_ID ='120'或CAT_ID ='121'或CAT_ID ='115'或CAT_ID ='122'或CAT_ID ='123'或CAT_ID ='124'或CAT_ID ='125'或CAT_ID ='116'或CAT_ID ='127'或CAT_ID ='128'或CAT_ID ='129'或CAT_ID ='117'或CAT_ID ='130'或CAT_ID ='131'或CAT_ID ='118'或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' OR CAT_ID = '142' OR CAT_ID = '143' OR CAT_ID = '144' OR CAT_ID = '145' OR CAT_ID = '146' OR CAT_ID = '134' OR CAT_ID = '147' OR CAT_ID = '148' OR 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'或CAT_ID ='173'或CAT_ID ='174'或CAT_ID ='161'或CAT_ID ='175'或CAT_ID ='176'或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 '或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' 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')和比赛(PRODUCT.TITLE)反对('衬衫'在布尔模式中)按产品顺序排列ASC限制0,12

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

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

由于

2 个答案:

答案 0 :(得分:1)

为您的表编制索引可以产生巨大的差异。在最近在MySql数据库中有150万条记录的作业中,带有连接的基本查询花费了超过35分钟。索引表(大约需要3-4分钟)后,查询将在4秒内完成。

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

要测试您的查询,请在本地计算机上抛出WAMP服务器的副本。导入脚本和数据库,然后运行一些测试。这可能会隔离您的查询是否效率低下,或者问题是否与服务器有关。

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

最后,如果所有其他方法都失败了,您可以使用缓存解决方案或更强大的数据库托管。在宏观方案中,4,000条记录并不是很大,您不应该遇到如此缓慢的加载时间。我通过Zend Framework的内置缓存系统获得了很好的缓存。

如果您仍然无处可去,请发布您的查询样本,然后我们就可以去镇上了!

答案 1 :(得分:-1)

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

我建议您使用Sphinx