我有以下两个表格MYSQL选择最早的日期记录为每一个独特的事件
CREATE TABLE IF NOT EXISTS `events` (
`id` bigint(20) NOT NULL AUTO_INCREMENT,
`title` varchar(255) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=MyISAM;
CREATE TABLE IF NOT EXISTS `events_dates` (
`id` bigint(20) NOT NULL AUTO_INCREMENT,
`event_id` bigint(20) NOT NULL,
`date` date NOT NULL,
`start_time` time NOT NULL,
`end_time` time NOT NULL,
PRIMARY KEY (`id`),
KEY `event_id` (`event_id`),
KEY `date` (`event_id`)
) ENGINE=MyISAM;
当链路EVENT_ID
我想是与有序各自的活动日期检索所有独特的事件记录通过在一定期限内的最小时间升序
基本上下面的查询不正是我想要的
SELECT Event.id, Event.title, EventDate.date, EventDate.start_time, EventDate.end_time
FROM
events AS Event
JOIN
com_events_dates AS EventDate
ON (Event.id = EventDate.event_id AND EventDate.date = (
SELECT MIN(MinEventDate.date) FROM events_dates AS MinEventDate
WHERE MinEventDate.event_id = Event.id AND MinEventDate.date >= CURDATE() # AND `MinEventDate`.`date` < '2013-02-27'
)
)
WHERE
EventDate.date >= CURDATE() # AND `EventDate`.`date` < '2013-02-27'
ORDER BY EventDate.date ASC , EventDate.start_time ASC , EventDate.end_time DESC
LIMIT 20
此查询是多次尝试进一步改进最初有(1.5秒)我想使用group by和其他子查询时的慢速时间的结果。它是目前最快的一个,但考虑到总共有1400个事件记录和10000个事件记录,查询需要400+毫秒的时间来处理,同时我也运行了一个基于此的计数(用于分页目的),这需要很多时间好。 奇怪的是,忽略了主要where子句中的EventDate条件导致它更高1s +。
有什么我可以做的,以改善这种或在表结构的不同方法?
它如何执行没有order by子句? – 2013-02-27 21:23:54
没有它的顺序执行速度快很多,但我真的需要它们按这种方式排序。 – zakel 2013-02-28 11:36:22