糟糕的MySQL LEFT JOIN性能,逐组最大化
技术问答
311 人阅读
|
0 人回复
|
2023-09-12
|
我有下表& {- W+ a8 B) Z" P0 i- s
CREATE TABLE `prod_prices` ( `id` varchar(32) COLLATE utf8_unicode_ci NOT NULL, `date` date NOT NULL, `price` decimal(10,2) NOT NULL, PRIMARY KEY (`id`,`date`)) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;还有一些样本数据/ k" J- R7 q% w9 l. G
INSERT INTO `prod_prices` (`id`,`date`,`price`) VALUES('plan_a','2012-06-15',10.20),('plan_a','2012-06-16',10.30),('plan_b','2012-06-15',5.20),('plan_b','2012-06-16',5.30),('plan_b','2012-06-17',5.50);并且想知道每个计划的最新价格。我有以下查询. Y2 X7 ~7 H( ` C1 H4 x
SELECT p1.id,p1.date,p1.priceFROM prod_prices p1LEFT JOIN prod_prices p2 ON p1.id = p2.idAND p1.date 这种方法虽然能产生真正的不良表现,但还是有效的。EXPLAIN表演
8 J0 r6 _* Y. J6 p. V' cid select_type table type possible_keys key key_len ref rows Extra1 SIMPLE p ALL NULL NULL NULL NULL 55 1 SIMPLE p二 ref PRIMARY PRIMARY p1.id Using where; Using index; Not exists因此p1表选择不使用任何索引。什么事?- ^) u+ V" [, m
( t* E6 p9 H0 P4 Y- _9 P 解决方案: |
|
|
|
|
|