表-數(shù)據(jù)量:A-15W,B-15W、C-15W、D-90W、E-900WA、B、C表 是一對一關(guān)系,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秒,請教如何優(yōu)化下問題補充:各表的id字段是主鍵,外鍵依次關(guān)聯(lián),如B.A_id關(guān)聯(lián)到A表主鍵且各表主鍵、where子句的條件都建立了索引
3 回答

溫溫醬
TA貢獻1752條經(jīng)驗 獲得超4個贊
提一點個人的看法,因為不知道具體的執(zhí)行計劃是什么所以未必一定有用。
我看你最后的條件中有三個條件
A.F1 = 'A'
and B.F1 = 'B'
and E.F1 = 'E'
如果執(zhí)行計劃中這三個是先查詢的,那么我的想法就沒用了,如果不是先查詢的,那么個人局的,可以吧E.F1 = 'E'寫為一個關(guān)于E表的子查詢,然后再去關(guān)聯(lián),這樣E表的900W數(shù)據(jù)可以先進行一遍過濾,關(guān)聯(lián)的數(shù)據(jù)會減少一些。AB兩個表也可以這樣操作,但是具體結(jié)果就不知道了,只能是試驗。畢竟語句太簡單,從語句本身來說沒什么。
還有一個就是如果可能的話,是不是可以考慮建立外鍵,前面的關(guān)聯(lián)能看出是一堆專有ID,如果專表的id(比如b表的id,A表的id等)能建主鍵,其他表能建立關(guān)于這個id的外鍵,那么應(yīng)該也能快一些。
添加回答
舉報
0/150
提交
取消