【转载】 yangtingkun: Oracle分页查询语句(四)
最后的例子说明内部循环包含排序的情况:SQL> CREATE TABLE T AS SELECT * FROM DBA_OBJECTS;表已创建。SQL> CREATE INDEX IND_T_OBJECT_NAME ON T (OBJECT_NAME);索引已创建。SQL> ALTER TABLE T MODIFY OBJECT_NAME NOT NULL;表已更改。SQL> EXEC DBMS_STATS.GATHER_TABLE_STATS(USER, 'T')PL/SQL 过程已成功完成。下面进行测试包含排序操作的分页查询。可以简单的将查询分为两种不同情况,第一种排序列就是索引列,这种可以利用索引读取,第二种排序列没有索引。第一种情况又可以细分为:完全索引扫描和通过索引扫描定位到
【转载】 yangtingkun: Oracle分页查询语句(三)
继续看查询的第二种情况,包含表连接的情况:SQL> CREATE TABLE T AS SELECT * FROM DBA_USERS;表已创建。SQL> CREATE TABLE T1 AS SELECT * FROM DBA_SOURCE;表已创建。SQL> ALTER TABLE T ADD CONSTRAINT PK_T PRIMARY KEY (USERNAME);表已更改。SQL> ALTER TABLE T1 ADD CONSTRAINT FK_T1_OWNER FOREIGN KEY (OWNER)2 REFERENCES T(USERNAME);表已更改。SQL> CREATE INDEX IND_T1_OWNER ON T1(NAME);索引已创建。SQL> EXEC DBMS_STATS.GATHER_TABLE_STATS(USER, 'T')PL/SQL 过程已成功完成。SQL> EXEC DBMS_STATS
【转载】 yangtingkun: Oracle分页查询语句(二)
这篇文章用几个例子来说明分页查询的效率。首先构造一个比较大的表作为测试表:SQL> CREATE TABLE T AS SELECT * FROM DBA_OBJECTS, DBA_SEQUENCES;表已创建。SQL> SELECT COUNT(*) FROM T;COUNT(*)----------457992首先比较两种分页方法的区别:SQL> SET AUTOT ONSQL> COL OBJECT_NAME FORMAT A30SQL> EXEC DBMS_STATS.GATHER_TABLE_STATS(USER, 'T')PL/SQL 过程已成功完成。SQL> SELECT OBJECT_ID, OBJECT_NAME 2 FROM 3 (4 SELECT ROWNUM RN, OBJECT_ID, OBJECT_NAME 5 FROM 6 (7 SELECT OBJECT_ID, OBJECT_NAME FRO
【转载】 yangtingkun: Oracle分页查询语句(一)
Oracle的分页查询语句基本上可以按照本文给出的格式来进行套用。分页查询格式:SELECT * FROM (SELECT A.*, ROWNUM RN FROM (SELECT * FROM TABLE_NAME) A WHERE ROWNUM <= 40)WHERE RN >= 21其中最内层的查询SELECT * FROM TABLE_NAME表示不进行翻页的原始查询语句。ROWNUM <= 40和RN >= 21控制分页查询的每页的范围。上面给出的这个分页查询语句,在大多数情况拥有较高的效率。分页的目的就是控制输出结果集大小,将结果尽快的返回。在上面的分页查询语句中,这种考虑主要体现在WHERE ROWNUM <= 40这句上。选择第21到40条