【发布时间】:2015-05-29 16:21:29
【问题描述】:
我有这个问题:
SELECT `assemblies`.`id`,
`assemblies`.`type`,
`assemblies`.`champion`,
`assemblies`.`name`,
`assemblies`.`author`,
`assemblies`.`githublastmod`,
( assemblies.forum IS NOT NULL ) AS forumExists,
Count(votes.id) AS votesCount,
Count(install_clicks.id) AS installCount,
Count(github_clicks.id) AS githubCount,
Count(forum_clicks.id) AS forumCount
FROM `assemblies`
INNER JOIN `votes`
ON `votes`.`assembly` = `assemblies`.`id`
INNER JOIN `install_clicks`
ON `install_clicks`.`assembly` = `assemblies`.`id`
INNER JOIN `github_clicks`
ON `github_clicks`.`assembly` = `assemblies`.`id`
INNER JOIN `forum_clicks`
ON `forum_clicks`.`assembly` = `assemblies`.`id`
WHERE `assemblies`.`type` = 'utility'
AND Unix_timestamp(Date(assemblies.githublastmod)) > '1419536536'
GROUP BY `assemblies`.`id`
ORDER BY `votescount` DESC,
`githublastmod` DESC
由于某种原因,这个查询非常慢,我正在使用数据库引擎 MyISAM。我希望有人可以在这里帮助我:)
解释命令:
【问题讨论】:
-
将解释命令添加为图像(复制/粘贴对我来说失败:(),链接到完整图像:i.stack.imgur.com/y8k8H.png
-
您的表中有哪些索引?连接表所涉及的所有字段是否都已编入索引?
-
我只将 id 设置为索引。我也应该为其他列添加索引吗?
-
你应该在
votes.assembly、install_clicks.`assembly等上添加索引 -
请
SHOW CREATE TABLE,而不是SHOW INDEXES。
标签: mysql performance myisam