mysql-query-optimization-order by多个字段来自不同的联接表

46qrfjad  于 2021-07-26  发布在  Java
关注(0)|答案(2)|浏览(174)

sql查询:

SELECT t1.col_A, t2.col_A, t2.col_B
FROM t1
INNER JOIN t2.ID = t1.t2_ID
WHERE t1.active = 1
ORDER BY t2.col_A ASC, t2.col_B ASC, t1.col_A ASC
LIMIT 0,100

表t1索引:
身份证件
科卢a
积极的
t2\U标识
表t2指标:
身份证件
科卢a
b列
在现实生活中,表不共享列名。
这里最重的是 ORDER BY ,则查询需要0.001秒,根据表的大小,查询需要9到10秒。
我在确定如何优化此查询时遇到问题。
按要求编辑,添加 EXPLAIN 输出:

4nkexdtk

4nkexdtk1#

试试这个,我希望能有点不同

ANALYZE TABLE t1;
      ANALYZE TABLE t2;
      create index idx_2 on t2 (col_a asc, col_b asc);
      create index idx_1 on t1(col_a asc);
vaqhlq81

vaqhlq812#

对于此查询,您需要两个索引:

SELECT t1.col_A, t2.col_A, t2.col_B
FROM t1 INNER JOIN
     t2
     ON t2.ID = t1.t2_ID
WHERE t1.active = 1
ORDER BY t2.col_A ASC, t2.col_B ASC, t1.col_A ASC
LIMIT 0, 100;

索引为:
t1(active, t2_id, col_a) t2(id, col_a, col_b) 如果 id 是主键。
不幸的是,没有办法(除了使用临时表)避免对 order by ,因为它正在合并来自不同表的列。

相关问题