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
子句引用了可选表,因此它否定了外部联接。你应该考虑重新编写查询。你如何重写,一个事件有不同的时间,并且许多事件有一个节日,并且必须按时间顺序显示列表。