您好我被要求从joomla网站审核数据库。最重要的一个中有近250个表,另一个是同时工作的数据库,但这里的主要问题是查询速度慢。
在慢查询日志中,我们可以看到如下内容:
# User@Host: user @ localhost [] Id: 186330
# Schema: mainDB Last_errno: 1160 Killed: 0
# Query_time: 92.095105 Lock_time: 0.232432 Rows_sent: 0
Rows_examined: 0 Rows_affected: 0
# Bytes_sent: 0
SET timestamp=1463917461;
SELECT *
FROM `tablename`
WHERE NOT(`option` LIKE'com_%');
这是该表的创建查询:
CREATE TABLE tablename (
id bigint(20) UNSIGNED NOT NULL,
option varchar(255) DEFAULT NULL,
option2 varchar(255) DEFAULT NULL,
option3 varchar(255) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
ALTER TABLE tablename
ADD PRIMARY KEY (id);
这是服务器的规范:
2 x 3ghz CPU cores, CentOS, 5 Gb Ram, 50 Gb SSD
Mysql 5.6
Server version: 5.6.29-76.2-log Percona Server (GPL), Release 76.2...
知道为什么慢查询?
答案 0 :(得分:0)
EXPLAIN SELECT *
FROM `tablename`
WHERE NOT(`option` LIKE'com_%');
你可能会发现它说'#34;所有"。这意味着查询必须只扫描整个表。
桌子有多大?
" Rows_sent:0 Rows_examined:0"令人费解 - 结果集中确实没有行吗?也就是说,每个option
都会以' com _'开头?他们真的需要运行该查询吗?
我没有看到优化查询的方法。我不认为INDEX(option)
会有所帮助,但你可以试试。