简单的一个查询就包含着不简单的内容,从oracle最简单的两个表中,顺序不一样,查询效率就不一样。不要小看学习中任何一点小的变化了同志们!
ORACLE的解析器会按照从右到左的顺序处理FROM子句中的表名,因此FROM子句中最后的一个表将作为驱动表被优先处理。当FROM子句存在多个表的时候,应当考虑将表上记录最少的那个表置于FROM的最右端作为基表。Oracle会首先扫描基表(FROM子句中最后的那个表)并对记录进行排序,然后扫描第二个表(FROM子句中最后第二个表),最后将所有从第二个表中检索出的记录与第一个表中合适记录进行合并。如果有3个以上的表连接查询,那就需要选择交叉表(intersection table)作为基础表,交叉表是指那个被其他表所引用的表
SELECT /*+ rule */ COUNT( * ) FROM dept, emp; --低效
SELECT /*+ rule */ COUNT( * ) FROM emp, dept; --高效