有好多時(shí)候,我們常聽別人說大表在前,小表在后,包括現(xiàn)在好多百度出來的靠前的答案都有說數(shù)據(jù)庫(kù)是從右到左加載的,所以from語句最后關(guān)聯(lián)的那張表會(huì)先被處理。如果三表交叉,就選擇交叉表來作為基礎(chǔ)表。等等一些結(jié)論,但是這些真的正確么?我就回家做了一個(gè)小的驗(yàn)證,來看一看到底是怎么一回事。(博主作實(shí)驗(yàn)用的是Oracle,但是不代表只是Oracle是這樣的原理,現(xiàn)在大部分的關(guān)系型數(shù)據(jù)庫(kù)都是一樣的)
首先我們來執(zhí)行一下以下的sql語句,來看一下執(zhí)行計(jì)劃??匆豢吹降资窃趺礃拥摹?/p>
1 drop table tab_big; --刪除原有big表2 drop table tab_small;3 create table tab_big as select * from dba_objects where rownum<=30000; --創(chuàng)建表,并且插入記錄4 create table tab_small as select * from dba_objects where rownum<=10;5 set autotrace traceonly --開啟執(zhí)行計(jì)劃和統(tǒng)計(jì)信息6 set linesize 10007 set timing on 8 select count(*) from tab_big,tab_small; 9 select count(*) from tab_small,tab_big;
OK,完事后咱們來看一看,到底表的順序到底是否會(huì)影響到數(shù)據(jù)庫(kù)的執(zhí)行效率,我們來看一下”select count(*) from tab_big,tab_small“和”