如何优化MySQL查询

时间:2015-02-16 19:25:30

标签: mysql

我正在尝试在我的网络应用程序中优化查询。如果我可以优化以下查询,我会非常有趣:

将EXPLAIN用于此查询

SELECT 
      t0_.id AS id0, t0_.name AS name1, t0_.date_start AS date_start2, t0_.date_end AS date_end3, t0_.logo AS logo4, g1_.name AS name5, g1_.code AS code6, count(g2_.id) AS sclr7 
FROM Tournament t0_ LEFT JOIN Round r3_ ON (r3_.tournament_id = t0_.id) 
LEFT JOIN Game g2_ ON (g2_.round_id = r3_.id) 
LEFT JOIN GameBrand g1_ ON (t0_.game_id = g1_.id) 
WHERE t0_.status_id = 1 AND t0_.date_start <= '2015-02-16' 
GROUP BY t0_.date_start 
ORDER BY t0_.date_start DESC;

我得'使用where;使用临时;对表 t0 _ 使用filesort' 如果我把 ORDER BY NULL ,那么使用filesort 就会消失但结果却没有正确排序。

是否可以某种方式删除使用filesort ? 谢谢

比赛表:

 CREATE TABLE `Tournament` (
 `id` int(11) NOT NULL AUTO_INCREMENT,
 `game_id` int(11) DEFAULT NULL,
 `name` varchar(255) COLLATE utf8_unicode_ci NOT NULL,
 `logo` varchar(255) COLLATE utf8_unicode_ci NOT NULL,
 `status_id` int(11) DEFAULT NULL,
 `date_start` date NOT NULL,
 `date_end` date DEFAULT NULL,
 PRIMARY KEY (`id`),
 KEY `IDX_F202BB09E48FD905` (`game_id`),
 KEY `IDX_F202BB096BF700BD` (`status_id`),
 KEY `date_start` (`date_start`,`date_end`),
 CONSTRAINT `FK_F202BB096BF700BD` FOREIGN KEY (`status_id`) 
 REFERENCES `TournamentStatus` (`id`),
 CONSTRAINT `FK_F202BB09E48FD905` FOREIGN KEY (`game_id`) 
 REFERENCES  `GameBrand` (`id`)
 ) ENGINE=InnoDB AUTO_INCREMENT=48 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci

游戏桌

CREATE TABLE `Game` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`round_id` int(11) DEFAULT NULL,
`date` date NOT NULL,
`teamOne` varchar(100) COLLATE utf8_unicode_ci NOT NULL,
`teamTwo` varchar(100) COLLATE utf8_unicode_ci NOT NULL,
`descr` varchar(255) COLLATE utf8_unicode_ci NOT NULL,
`youtube` varchar(75) COLLATE utf8_unicode_ci NOT NULL,
`subround_id` int(11) DEFAULT NULL,
`title` varchar(100) COLLATE utf8_unicode_ci NOT NULL,
`date_on_site` datetime NOT NULL,
 PRIMARY KEY (`id`),
 KEY `IDX_83199EB2A6005CA0` (`round_id`),
 KEY `FK_83199EB2AD90E129` (`subround_id`),
 KEY `date_on_site` (`date_on_site`),
 KEY `date` (`date`),
 CONSTRAINT `FK_83199EB2A6005CA0` FOREIGN KEY (`round_id`) REFERENCES `Round` (`id`),
 CONSTRAINT `FK_83199EB2AD90E129` FOREIGN KEY (`subround_id`) REFERENCES `SubRound` (`id`)
 ) ENGINE=InnoDB AUTO_INCREMENT=992 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci

GameBrand表:

CREATE TABLE `GameBrand` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`name` varchar(150) COLLATE utf8_unicode_ci NOT NULL,
`code` varchar(10) COLLATE utf8_unicode_ci NOT NULL,
PRIMARY KEY (`id`),
KEY `code` (`code`)
) ENGINE=InnoDB AUTO_INCREMENT=6 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci

0 个答案:

没有答案
相关问题