1、使用leading和use_nl来设置表的查询顺序,来加快查询速度,一般把小表设为第一个表。
/*+LEADING(TABLE)*/
将指定的表作为连接次序中的首表.
/*+USE_NL(TABLE)*/
将指定表与嵌套的连接的行源进行连接,并把指定表作为内部表.
成本计算方法:
设小表100行,大表100000行。
两表均有索引:
如果小表在内,大表在外(驱动表)的话,则扫描次数为:
100000+100000*2 (其中2表示IO次数,一次索引,一次数据)
如果大表在内,小表在外(驱动表)的话,则扫描次数为:
100+100*2.
两表均无索引:
如果小表在内,大表在外的话,则扫描次数为:
100000+100*100000
如果大表在内,小表在外的话,则扫描次数为:
100+100000*100
注意:
如果一个表有索引,一个表没有索引,ORACLE会将没有索引的表作驱动表。
如果两个表都有索引,则外表作驱动表。
如果两个都没索引的话,则也是外表作驱动表。
2、使用index直接匹配索引来查询数据提高查询速度
表明对表选择索引的扫描方法.
3、当判断某几个表中是否存在某种关系的行时可使用rownum=1来作为条件而加快速度,如果必须有多行才满足条件时,可设置rownum <= n。
例如:获得一个v_count值判断是否大于0,equipment表 几万条,controledpnsnrange 几千条
select count(sc.pmnum) into v_count from equipment e, sal_controledpnsnrange sc where (sc.new_min_item_no <= e.itemnum) and (sc.new_max_item_no >= e.itemnum) and (sc.new_min_serial_no <= e.serialnum) and (sc.new_max_serial_no >= e.serialnum) and e.itemnum = a_item_no;
执行时间大约为3分钟。
代码修改后:
select /*+ leading(e) use_nl(sc) */ count(sc.pmnum) into v_count from equipment e, sal_controledpnsnrange sc where (sc.new_min_item_no <= e.itemnum) and (sc.new_max_item_no >= e.itemnum) and (sc.new_min_serial_no <= e.serialnum) and (sc.new_max_serial_no >= e.serialnum) and e.itemnum = a_item_no;
执行时间大约为45秒。
代码再次修改后:
select /*+ leading(e) use_nl(sc) */ count(sc.pmnum) into v_count from equipment e, sal_controledpnsnrange sc where (sc.new_min_item_no <= e.itemnum) and (sc.new_max_item_no >= e.itemnum) and (sc.new_min_serial_no <= e.serialnum) and (sc.new_max_serial_no >= e.serialnum) and e.itemnum = a_item_no and rownum = 1;
执行时间大约为4秒。
相关推荐
oracle_SQL中rowid与rownum的使用
oracle_SQL中ROWID与ROWNUM的使用 很有用哦
MLDN魔乐科技_Oracle课堂19_修改约束、ROWNUM MLDN魔乐科技_Oracle课堂19_修改约束、ROWNUM
MLDN魔乐科技JAVA培训_Oracle课堂19_修改约束、ROWNUM.rar
oracle_SQL中 rowid 和rownum的使用
oracle 分页查询 使用ROWNUM技巧及陷阱
关于oracle的rownum关于oracle的rownum关于oracle的rownum关于oracle的rownum关于oracle的rownum
Oracle中rownum的使用
oracle rownum和distinct
oracle 的rownum和咱们平时用的sqlserver的区别,其中好多的不一样!
Oracle中ROWNUM的使用技巧 ROWNUM是一种伪列,它会根据返回记录生成一个序列化的数字。利用ROWNUM,我们可以生产一些原先难以实现的结果输出
主要介绍了Oracle中使用Rownum分页详细例子,本文将分别展示使用rownum伪列和row_number()分析函数来完成Oracle数据分页操作的具体使用方法,需要的朋友可以参考下
而是经常是查不出一条记录来,还会出现似乎是莫名其妙的结果来,其实您只要理解好了这个 rownum 伪列的意义就不应该感到惊奇,同样是伪列,rownum 与 rowid 可有些不一样,下面以例子说明 假设某个表 t1(c1) 有 20...
ORACLE 中ROWNUM用法总结 整理版本,详细明了
对于rownum来说它是oracle系统顺序分配为从查询返回的行的编号,返回的第一行分配的是1,第二行是2,依此类推,这个伪字段可以用于限制查询返回的总行数,而且rownum不能以任何表的名称作为前缀。
举例介绍在oracle中rownum和rowId的不同以及使用方法
详细解析了oracle的rownum,举例说明rownum的使用方法和技巧及要注意的地方。研究在想要查找前N个数据时,如何高效地使用rownum。
注意:对 rownum(伪列) 只能使用 < 或 <=, 而用 =, >, >= 都将不能返回任何数据 例:查询工资前20名的员工姓名,工资 ,工资由高到低 Select rownum,first_name,salary from (Select first_name, salary ...