关联查询(left/right)优化
核心要点:
- 查询条件加索引
- 关联条件加索引(即使是分别根据某些条件查询两个表的结果作为两个虚表关联查询,关联条件也要加索引)
- 尽量不使用select * ,只查需要的列
- 尽量减少回表
查询示例sql:
SELECT * FROM
(SELECT * FROM a WHERE a.len1='' AND a.len2='')a1
LEFT JOIN
(SELECT * FROM b WHERE b.len1='' AND b.len2='')b1
ON a1.len=b1.len and a1.len3=b1.len3 and a1.len4=b1.len4
对于这种查询,我们一眼就可以看出来要给a表和b表的len1和len2两列加聚合索引,然后用explain关键字一查询发现都用到了索引,优化思路一下就没有了。
对于这个sql,我们还需要给a表和b表的len、len3和len4三列加聚合索引
这个sql还可以写成
SELECT a.*, b.*
FROM a
LEFT JOIN b ON a.len = b.len
AND a.len3 = b.len3
AND a.len4 = b.len4
AND b.len1 = ''
AND b.len2 = ''
WHERE a.len1 = ''
AND a.len2 = ''
或
SELECT a.*, b.*
FROM a
LEFT JOIN b ON a.len = b.len
AND a.len3 = b.len3
AND a.len4 = b.len4
WHERE a.len1 = ''
AND a.len2 = ''
AND (b.id IS NULL OR (b.len1 = '' AND b.len2 = ''))
实践过程中,大家可以尝试多种写法,使用explain关键字进行分析,看那种方式更高效。