资源描述:
《oracle中select数据时默认的显示顺序(续) - focus on oracle》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、Oracle中select数据时默认的显示顺序(续)有朋友问我在oracle里执行select语句后oracle默认的显示顺序是什么?他说网上有三种观点:1、select的时候oracle默认的显示顺序是按照数据插入的顺序来显示。2、select的时候oracle默认的显示顺序是按照数据的rowid的顺序来显示。3、select的时候oracle没有一个固定的顺序,但是当所选择的数据是在一个extent中的时候,这些数据是按照rowid来排序的。他问我哪种观点正确?我说上述观点都是错的!我现在来证明一下。先建
2、立一个只有1M大小的autoallocate的LMT的tablespace:SQL>connscott/tiger@cuihua;ConnectedtoOracleDatabase10gEnterpriseEditionRelease10.2.0.1.0ConnectedasscottSQL>showparameterdb_block_size;NAMETYPEVALUE----------------------------------------------------------------------
3、-------db_block_sizeinteger8192SQL>createtablespacetesttbsdatafile'D:oracleoradatacuihuatest01.dbf'size1M;Tablespacecreated然后我们建一个表t1,这个table占据896K,即占据14个extent:SQL>createtablet1(idnumber,namevarchar2(30))tablespacetesttbsstorage(initial896K);Tablecreat
4、ed现在表空间testtbs中还剩下64K的剩余空间(1M-896K-64K=64K),如下所示:SQL>colsegment_nameformata5SQL>selectsegment_name,extent_id,block_idfromdba_extentswheresegment_name='T1';SEGMEEXTENT_IDBLOCK_ID-------------------------T109T1117T1225T133314T1441T1549T1657T1765T1873T1981T110
5、89T11197T112105T11311314rowsselected这里为什么要减去64K是因为testtbs所在的datafile占用了8个block作为文件头,从上面显示结果里我们也可以看到表T1的block_id也是从9开始(因为前8个已经被用作文件头了)。接着我们再建一个表t2,t2的特性就决定了它的一个block只能存下t2的一行数据(因为现在一个block的大小为8K):SQL>createtablet2(idnumber,c1char(2000),c2char(2000),c3char(20
6、00))tablespacetesttbsstorage(initial64K);Tablecreatedtesttbs是一个autoallocate的LMT表空间,oracle这里每次自动分配的extent的最小值是64K,换句话说,表t2中的数据只能插入到其initial分配的64K的那个extent中,当这个initial的extent插入满后oracle将不再能够给t2分配另外一个extent!t2中的这initial64K最多只能插入5条记录,因为(64K-24K)/8K=5,这里为什么要减去24K
7、是因为t2中的前3个block要被用来当作表头。好,我们来测试一下上述结论:SQL>insertintot2VALUES(1,'A','A','A');1rowinsertedSQL>insertintot2VALUES(2,'A','A','A');1rowinsertedSQL>insertintot2VALUES(3,'A','A','A');1rowinsertedSQL>insertintot2VALUES(4,'A','A','A');1rowinserted14SQL>insertintot2V
8、ALUES(5,'A','A','A');1rowinsertedSQL>commit;CommitcompleteSQL>insertintot2VALUES(6,'A','A','A');insertintot2VALUES(6,'A','A','A')ORA-01653:表SCOTT.T2无法通过8(在表空间TESTTBS中)扩展这时候我们看到确实第6条记录已经不能够被插入到表t2中。现在我们