猿问

多表联查的sql语句怎么优化查询速度

表-数据量:A-15W,B-15W、C-15W、D-90W、E-900W
A、B、C表 是一对一关系,C到D平均一对六,D到E平均一对十
SQL:
Select
A.F1, A.F2, A.F3, B.F1, B.F2, B.F3, …… E.F1, E.F2, E.F3
From
A, B, C, D, E
Where
A.id = B.A_id
and B.id = C.B_id
and C.id = D.C_id
and D.id = E.D_id
and A.F1 = 'A'
and B.F1 = 'B'
and E.F1 = 'E'
Order by A.F2 desc
整个SQL查下来要16秒,请教如何优化下
问题补充:各表的id字段是主键,外键依次关联,如B.A_id关联到A表主键
且各表主键、where子句的条件都建立了索引

手掌心
浏览 4835回答 3
3回答

温温酱

提一点个人的看法,因为不知道具体的执行计划是什么所以未必一定有用。我看你最后的条件中有三个条件A.F1 = 'A'and B.F1 = 'B'and E.F1 = 'E'如果执行计划中这三个是先查询的,那么我的想法就没用了,如果不是先查询的,那么个人局的,可以吧E.F1 = 'E'写为一个关于E表的子查询,然后再去关联,这样E表的900W数据可以先进行一遍过滤,关联的数据会减少一些。AB两个表也可以这样操作,但是具体结果就不知道了,只能是试验。毕竟语句太简单,从语句本身来说没什么。还有一个就是如果可能的话,是不是可以考虑建立外键,前面的关联能看出是一堆专有ID,如果专表的id(比如b表的id,A表的id等)能建主键,其他表能建立关于这个id的外键,那么应该也能快一些。
随时随地看视频慕课网APP

相关分类

MySQL
我要回答