Mysql 如何使用临时工具下车;使用查询中的文件排序

Mysql 如何使用临时工具下车;使用查询中的文件排序,mysql,indexing,sql-execution-plan,Mysql,Indexing,Sql Execution Plan,说明 SELECT * FROM `EventTimes` LEFT JOIN Events on event_id=Events.id WHERE festival_id = 12 ORDER BY time; 对于事件表,我有以下字段: id name festival_id 等等 对于EventTimes表,我有: id event_id time 等等 我为EventTimes创建索引:create index eventid\u EventTimes上的时间(event\u

说明

SELECT * 
FROM `EventTimes` 
LEFT JOIN Events on event_id=Events.id
WHERE festival_id = 12 
ORDER BY time;
对于事件表,我有以下字段:

id
name
festival_id
等等

对于EventTimes表,我有:

id
event_id
time
等等

我为EventTimes创建索引:
create index eventid\u EventTimes上的时间(event\u id,time)
我还为活动创建了一个索引:
create index ev\u festival alid on Events(festival\u id)

但我明白了

对于活动:

Select_type: Simple
Table : Events
Type : ref
possible_keys: PRIMARY,ev_festivalid
key : ev_festivalid
key_len: 5
ref: const
rows : 14
Extra : Using where; Using temporary; Using filesort
对于EventTimes:

Select_type: Simple
Table : EventTimes
Type : ref
possible_keys: eventid_time
key : eventid_time
key_len: 5
ref: dbname.Events.id
rows : 1
Extra : Using where

如何避免使用临时设备;在事件中使用filesort?

之所以使用filesort,是因为返回的行是按festival\u id排序的,而您是按时间重新排序的,因此mysql需要对结果重新排序。对于给定的模式和查询,我看不到一种简单的解决方法。如果我是你,我就不会太担心文件排序了。这真的没有听起来那么糟糕。阅读更多信息


我还应该指出,您使用
左JOIN
没有意义。由于
WHERE
子句引用了可选表,因此它否定了外部联接。你应该考虑重新编写查询。

你如何重写,一个事件有不同的时间,并且许多事件有一个节日,并且必须按时间顺序显示列表。