为什么MySQL没有使用ORDER BY时使用filesort?

问题描述:

所有,为什么MySQL没有使用ORDER BY时使用filesort?

我试图解决一些性能问题,并就分析这个查询我有:

EXPLAIN SELECT entry.entry_key, entry.node, entry.object_type, entry.object_id, 
       entry.copy_id, entry.seq_number, entry.root_seq_number, entry.first_error, 
       entry.last_error, entry.error_count, entry.error_id, entry.error_code, 
       entry.status, entry.type, entry.sense, entry.reviewed 
     FROM eventlog me JOIN eventlog_entry eventlog_entries 
      ON eventlog_entries.eventlog_key = me.eventlog_key JOIN entry entry 
      ON entry.entry_key = eventlog_entries.entry_key 
     WHERE (((first_error >= '0' AND last_error <= '2147483640') AND 
        me.eventlog_key = '1')) 
     GROUP BY entry.entry_key\G 
*************************** 1. row *************************** 
      id: 1 
    select_type: SIMPLE 
     table: me 
     type: const 
possible_keys: PRIMARY 
      key: PRIMARY 
     key_len: 8 
      ref: const 
     rows: 1 
     Extra: Using index; Using temporary; Using filesort 
*************************** 2. row *************************** 
      id: 1 
    select_type: SIMPLE 
     table: eventlog_entries 
     type: ref 
possible_keys: eventlog_entry_idx_entry_key,eventlog_entry_idx_eventlog_key 
      key: eventlog_entry_idx_eventlog_key 
     key_len: 8 
      ref: const 
     rows: 1 
     Extra: 
*************************** 3. row *************************** 
      id: 1 
    select_type: SIMPLE 
     table: entry 
     type: eq_ref 
possible_keys: PRIMARY 
      key: PRIMARY 
     key_len: 8 
      ref: eventlog.eventlog_entries.entry_key 
     rows: 1 
     Extra: Using where 
3 rows in set (0.00 sec) 

查询也有ORDER BY在里面,但我删除了。但是,EXPLAIN仍在报告文件,我找不到原因。 MySQL优化器是否在某处缓存了优化?或者是用于其他原因的文件?

无论何时您执行GROUP BY,MySQL都会进行默认排序。为了避免这种情况,只需添加ORDER BY NULL

+0

太好了。出于兴趣,是否记录在某处? – Dancrumb

+2

在'SELECT'文档中找到它:“如果使用GROUP BY,则输出行将根据GROUP BY列进行排序,就像您对同一列有ORDER BY一样。为避免排序该GROUP BY产生的开销,添加ORDER BY NULL“ – Dancrumb