2011-05-02 147 views
1

我正在使用此查询进行搜索,但查询速度很慢。任何人都可以建议我为这个查询替代?查询优化Mysql

SELECT c.ctgr_name,n.lgcode,n.newsID,n.newsTITLE,n.image3,n.ctgr_code 
FROM tbnews n LEFT JOIN tbcategory c ON c.ctgr_code=n.ctgr_code 
WHERE (newsTITLE LIKE "% Foray %" OR image3 LIKE "%Foray%" OR video3 LIKE "%Foray%" 
OR newsTITLE LIKE "% Foray %" OR image3 LIKE "%Foray%" OR video3 LIKE "%Foray%") 
AND (n.publish!=0) 
ORDER BY newsID DESC LIMIT 10 

回答

1

1)在询问优化之前,总是运行EXPLAIN SELECT。在查询之前粘贴“EXPLAIN”关键字,然后运行它--MySQL会告诉你它想做什么,你会立即看到它被卡住的地方以及它不使用索引的地方。

2)使用LIKE'%%'搜索(在AND关键字之前带有百分比符号)强制MySQL执行全表扫描。如果索引存在,使用像LIKE'关键字%'MIGHT这样的搜索使MySQL使用该字段上的索引。

3)配置您的MySQL实例,调整配置并使用合适的存储引擎可以大幅提升性能。默认情况下,MySQL被配置为在非常慢的机器上工作并使用非常少的资源 - 因此,当表格变得稍大(比如,10万行)时,人们会注意到性能下降。如果配置正确,MySQL可以轻松处理大型表。

+0

你可以告诉我这个查询的替代者 – Deepa 2011-05-02 09:16:26

+0

请仔细阅读我写的内容,我想我用清晰的英文解释了任何人都可以理解的信息。没有更多的信息从你身边 - 不,我无法进一步帮助你。 – 2011-05-02 09:24:08

+0

实际上,我在一个表中托管了一个拥有超过500000条记录的网站。服务器管理员只为上述查询停止该站点。并且我认为查询不会造成这种类型的问题。我已经使用解释,但我没有发现任何问题。我在搜索领域使用索引。但我现在需要一个备用查询。 – Deepa 2011-05-02 09:40:10

0

在非索引字段上使用LIKE "% Foray %"构造会使查询速度下降很多。你拥有的数据越多,需要的时间就越多。

考虑添加一些关键字/标签机制与索引字段,你会搜索英寸可能是一个额外的表。

+0

我使用几乎所有的字段进行搜索。我可以索引所有这些领域吗? – Deepa 2011-05-02 08:30:53

0

索引可能无助于LIKE“%Foray%”类型的搜索,因为需要扫描数据库中的每个字符串。

如果您正在搜索单个单词,您可以将单个单词提取到单独的表中,您可以有效地编制索引并将其引回原始记录。这将需要更多空间,但会提高速度。