下面的這條sql應該怎么優化?
|
里面的查詢返回的記錄數一般只有一兩條,但sys_user表的數據很多,怎么樣才能讓這條sql以sys_grp為驅動表?
表中記錄情況如下:
|
優化:
降低邏輯讀是優化SQL的基本原則之一
我們嘗試通過降低邏輯讀來加快SQL的執行.
這里我們使用or展開來改寫SQL查詢:
|
我們注意到,通過改寫,邏輯讀減少到130,從30590到130這是一個巨大的提高,減少邏輯讀最終會減少資源消耗,提高SQL的執行效率.
這個改寫把Filter改為了Nest LOOP,索引得以充分利用.從而大大提高了性能.
我們同時注意到,這里引入了一個排序
排序來自于這一步:
|
注釋:在'SYS_GRP'表中,user_code 是非唯一鍵值,在in值判斷里,要做sort unique排序,去除重復值,這里的union all是不需要排序的。
新聞熱點
疑難解答