我有两个表TABLE A和TABLE B。表A包含100万条记录和4个字段,而表2包含60,000条记录和3个字段。我正在运行一个连接这两个表的查询,并使用WHERE子句来查找特定的产品,如WHERE产品,如'%Bags%‘和产品,如'Bags%’e.t.c.
当我直接在phpMyAdmin中运行查询时,它会在大约1到2秒内返回记录。但是当它们在网站上使用时,根据MySQL的“慢查询”日志,它们有时需要9到10秒。实际上,我的网站有时响应非常慢,所以经过调查,我发现这是由于MySQL,因为我开始了解‘慢查询日志’。
慢查询日志由执行时间超过long_query_time秒且至少需要检查min_examined_row_limit行的所有SQL语句组成。
所以根据日志,上面查询"query_time“是13秒,而在某些情况下,"query_time”甚至超过了50秒。
我的两个表都使用主键和索引。所以我想知道如何进一步优化它们,或者是否有任何方法可以优化MySQL设置?
这种缓慢的网站并不总是发生,但有时(可能是一周一次),并持续大约1到2分钟。它获得了相当多的流量,还有许多其他的查询,上面我发布的只是一个例子。
谢谢
发布于 2010-12-20 14:00:48
有关所有与MySQL和性能相关的内容,请查看http://www.mysqlperformanceblog.com/
使用EXPLAIN检查您的查询,有关如何使用EXPLAIN作为查询诊断工具的信息,请参阅here和here。
仅仅有索引是不够的。是否要为WHERE子句中搜索到的字段编制索引?另外,WHERE子句中使用的字段(包括ORDER BY、GROUP BY、HAVING子句和JOIN中提到的字段)是否有索引?如果您在单个索引中对字段进行了分组,则不会命中该索引,除非您有一个查询将所有这些字段都搜索在一起。如果您对索引中的字段进行分组,请确保它们将在您的查询中实际使用(EXPLAIN是您的朋友)。
也就是说,这也可能是许多其他原因:配置不佳的MySQL服务器,调优不佳的服务器,糟糕的模式。但是您的查询和索引是开始您的调查的好地方。
Here是来自MySQL的Jay Pipes的性能最佳实践的很好的总结。
发布于 2010-12-20 13:45:31
无法使用索引优化like '%Bags%'
查询。
这里提高性能的唯一方法是使用fulltext indexes或获取sphinx进行搜索。
发布于 2010-12-20 13:45:24
这是因为当您要刷新您的网站页面时,会运行一些其他查询。因此,例如,如果您的网站在页面刷新时运行8-10个查询,那么它将比您在phpmyadmin
中运行单个查询所需的时间更长。如果它需要1-1.5分钟来执行,那么它可能不是查询问题,但它也可能与服务器速度有关。
您还可以使用MATCH() AGAINST()
语句来优化这种类型的搜索查询。
否则,您已经在使用PRIMARY KEY, INDEXES and JOINS
了,所以不需要担心其他事情。
就去看看吧。
谢谢。
https://stackoverflow.com/questions/4487187
复制相似问题