有好多时候,我们常听别人说大表在前,小表在后,包括现在好多百度出来的靠前的答案都有说数据库是从右到左加载的,所以from语句最后关联的那张表会先被处理。如果三表交叉,就选择交叉表来作为基础表。等等一些结论,但是这些真的正确么?我就回家做了一个小的验证,来看一看到底是怎么一回事。(博主作实验用的是Oracle,但是不代表只是Oracle是这样的原理,现在大部分的关系型数据库都是一样的)
首先我们来执行一下以下的sql语句,来看一下执行计划。看一看到底是怎么样的。
1 drop table tab_big; --删除原有big表2 drop table tab_small;3 create table tab_big as select * from dba_objects where rownum<=30000; --创建表,并且插入记录4 create table tab_small as select * from dba_objects where rownum<=10;5 set autotrace traceonly --开启执行计划和统计信息6 set linesize 10007 set timing on 8 select count(*) from tab_big,tab_small; 9 select count(*) from tab_small,tab_big;
OK,完事后咱们来看一看,到底表的顺序到底是否会影响到数据库的执行效率,我们来看一下”select count(*) from tab_big,tab_small“和”