2015-04-07 108 views
-1

有时候我知道查询的性能问题是因为左连接,我该怎么办? (建议替换一个子查询?)由于左连接速度较慢

想象一下,我们有表A和B,低速是因为左连接,你们推荐的解决方案是什么? 任何形式的帮助表示赞赏

CREATE TABLE A (a1 VARCHAR(10), 
       a2 INT, 
       a3 INT) 

CREATE TABLE B (b1 VARCHAR(10), 
       b2 INT, 
       ab3 INT) 

INSERT INTO A 
VALUES ('a1', 11, 91), 
     ('a2', 12, 92), 
     ('a3', 13, 93), 
     ('a4', 14, 94) 

INSERT INTO B 
VALUES ('b1', 21, 91), 
     ('b2', 22, 92), 
     ('b3', 23, 93) 

------------------------- 
SELECT * 
FROM  A 
LEFT JOIN B ON a3 = ab3 
+0

你有任何索引设置在这些表/列上? –

+0

正如我检查索引在这种情况下不起作用 – user3742119

+0

我希望你会在每个表中有一个主键列,所以你有这些列的聚集索引。然后你有没有尝试在A(a3)和B(ab3) – Stephan

回答

1

基于我的经验,我会建议你考虑以下几点
- 删除不必要的左联接
- 删除where子句,如果它能够随着内部使用的连接条件
- 可在您的列创建索引
- 选择所需的列,避免使用*对所有列
- 避免你列给大长度

+0

小修正:“删除'WHERE'子句,如果它可以与** INNER JOIN **条件一起使用” –

+0

是的内部加入 谢谢 –