我在以下查询中遇到性能问题。行数从下面提供的每个表中计算。我在运行查询之前创建了组索引。
select count(*) from temp1
; - 3864797
select count(*) from temp2;
- 36985
在MIS.temp1上创建索引sav1dx1(tpid,origin_airport,dest_airport_1,dest_airport_2); 在MIS.temp2上创建索引savidx3(tpid,origin_airport,dest_airport_3);
CREATE temporary TABLE MIS.Tempfinal engine=Innodb as
select a.tpid,a.origin_airport,a.dest_airport_1,a.dest_airport_2,c.dest_airport_3,a.saving_1,a.saving_2,c.saving_3
from MIS.temp1 a join MIS.temp2 c on a.tpid = c.tpid and a.origin_airport = c.origin_airport
and a.dest_airport_1 <> c.dest_airport_3 and a.dest_airport_2 <> c.dest_airport_3
上述查询最终会在3小时内显示583627364行。
下面是解释输出: 将temps_1保存为temp1,将SaVings3保存为temp2
解释 选择a.tpid,a.origin_airport,a.dest_airport_1,a.dest_airport_2,c.dest_airport_3,a.saving_1,a.saving_2,c.saving_3 来自MIS.Savings_1在a.tpid = c.tpid和a.origin_airport = c.origin_airport上加入MIS.SaVings3 c 和a.dest_airport_1&lt;&gt; c.dest_airport_3和a.dest_airport_2&lt;&gt; c.dest_airport_3;
1 | SIMPLE | c | ALL | savidx3 ||| 37323 |使用where 1 | SIMPLE | a | ref | sav1dx1 | sav1dx1 | 18 | MIS.c.tpid,MIS.c.origin_airport | 1 |使用索引条件;使用何处
提前致谢。