我已经为这个问题苦苦挣扎了2天,但没有找到解决方案。
我以10秒的时间记录mysql慢查询。在日志文件中,带有以下语句的条目很大:
# Thread_id: 222244 Schema: user QC_hit: No
# Query_time: 51.019708 Lock_time: 0.000119 Rows_sent: 1 Rows_examined: 13295012
# Rows_affected: 0
SET timestamp=1559388099;
SELECT (COUNT(*)) AS `count`
FROM statistics Statistics WHERE (id >= 1 AND ad_type <> 3);
这与apache请求激增有关。 query_time最多需要一分钟或更长时间才能完成,并且导致我的服务器超载。 问题是我无法在php脚本中找到导致查询缓慢的文件。
是否有任何命令行可找到关联的文件。还是任何快速的方法?
CREATE TABLE statistics` (
id bigint(20) unsigned NOT NULL AUTO_INCREMENT,
... ,
PRIMARY KEY (id),
KEY idx_uid (uid),
KEY idx_ip (ip),
KEY idx_cnid_uid (cid,uid),
KEY idx_rlid (rid),
KEY idx_created_uid (created,uid)
) ENGINE=InnoDB AUTO_INCREMENT=34015 DEFAULT CHARSET=utf8
答案 0 :(得分:0)
如果没有理由检查id >= 1
,请摆脱它-它会抑制某些优化。
然后添加INDEX(ad_type)
不过,我认为没有充分的理由让34K行(?)表上的COUNT(*)
花费51秒。必须涉及其他事项。