表-数据量:A-15W,B-15W、C-15W、D-90W、E-900WA、B、C表 是一对一关系,C到D平均一对六,D到E平均一对十SQL:SelectA.F1, A.F2, A.F3, B.F1, B.F2, B.F3, …… E.F1, E.F2, E.F3FromA, B, C, D, EWhereA.id = B.A_idand B.id = C.B_idand C.id = D.C_idand D.id = E.D_idand A.F1 = 'A'and B.F1 = 'B'and E.F1 = 'E'Order by A.F2 desc整个SQL查下来要16秒,请教如何优化下问题补充:各表的id字段是主键,外键依次关联,如B.A_id关联到A表主键且各表主键、where子句的条件都建立了索引
3 回答
温温酱
TA贡献1752条经验 获得超4个赞
提一点个人的看法,因为不知道具体的执行计划是什么所以未必一定有用。
我看你最后的条件中有三个条件
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的外键,那么应该也能快一些。
添加回答
举报
0/150
提交
取消