連表查詢時,from後子句的執行順序和優化

2021-05-22 23:34:19 字數 498 閱讀 5036

今天我遇到乙個面試題:from後面的子句,它的執行順序是從左向右還是從右向左?如何進行優化?

我猛然的愣住了,因為我畢竟不是專搞資料庫的,我只能憑感覺說出了從右向左。至於為什麼,我也說不出來個所以然。

後來和專搞資料庫的同事商量了一下,大概做出了如下結論:

比如乙個sql查詢語句:

select * from a , b ,c    where  a.***=b.*** and b.###=c.###

那麼oralce在執行的時候,from後的a,b,c到底是乙個怎麼樣的執行順序呢?

這一查詢的連線順序是a->b->c。

事實上,oracle首先將c雜湊進入記憶體,然後將a雜湊進入記憶體,然後開始讀b。對於b的每一行,oracle探查a雜湊尋找匹配,因此第乙個連線是a->b;如果第乙個探查是成功的,那麼oracle探查c雜湊尋找匹配,因此第二個連線是b->c—— 雖然從技術上講我們應該說第二個連線是(a->b)->c。

所以優化的時候應該是資料量大的表放在前面。

mysql的連表查詢 MySQL 連表查詢

連表查詢 連表查詢通常分為內連線和外連線。內連線就是使用inner join進行連表查詢 而外連線又分為三種連線方式,分別是左連線 left join 右連線 right join 全連線 full join 下來我們一起來看一下這幾種連線方式的區別及基礎用法。內連線inner join inner...

分庫,分表後連表查詢的問題解決方案

方案一 利用union,union all 方案二 建一張主表將你要連表查詢的字段放在其中,做好索引 你還記錄下使用者經常查詢的條件,把查出的資料快取,以便使用者經常呼叫。方案三 我們可以把經常要用到的資料寫到cache中,這樣以後要獲取的時候直接到cache裡拿。比如一天更新一次的情況 像德問的排...

水平分庫分表後的分頁查詢

分庫後,分頁查詢按照時間time來排序order by。若查詢第x頁的資料,每頁y條。一共n個庫。步驟 將order by time offset x y 1 limit y,改寫成order by time offset 0 limit x y 1 y 服務層將改寫後的sql語句發往各個分庫 即每...