以下查询,没有解释)执行速度非常慢(多秒),尽管是对MySQL表上最后5个ID的非常基本的查找。我在解释中注意到,它使用了一个没有意义的键,因为我们在查询中没有使用该字段(“赠送”)。
如果我们删除COALESCE,它会正常运行。不幸的是,这对我们来说不是一个选项,因为我们需要将NULL值(在其他字段上)强制为空字符串或输出中的其他值。
不幸的是,此查询正在我们无法更改查询的系统中使用。
按原样,为什么执行路径会以它的方式发生?
mysql> explain SELECT COALESCE(bags.id,'') AS "_g1",
-> bags.id AS "bags_id"
-> FROM bags
-> GROUP BY 1
-> ORDER BY concierge_bags.id DESC
-> LIMIT 5 \G;
*************************** 1. row ***************************
id: 1
select_type: SIMPLE
table: bags
type: index
possible_keys: NULL
key: index_bags_on_complimentary
key_len: 2
ref: NULL
rows: 286582
Extra: Using index; Using temporary; Using filesort
1 row in set (0.00 sec)
mysql> SHOW CREATE TABLE bags \G;
*************************** 1. row ***************************
Table: bags
Create Table: CREATE TABLE `bags` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`complimentary` tinyint(1) DEFAULT '0',
`state` varchar(255) NOT NULL,
PRIMARY KEY (`id`),
KEY `index_bags_on_complimentary` (`complimentary`),
) ENGINE=InnoDB AUTO_INCREMENT=284632 DEFAULT CHARSET=latin1
请注意,我已经删除了不在此查询中的行李上的一些额外字段。
答案 0 :(得分:0)
你不能用CASE而不是COALESCE吗?你为什么要分组1?