数据聚合表。
2、 Polysurface:什么是polysurface剂?3、聚合表:如何聚合表项先看看如何创建HASHSORTCLUSTER:
SQL>CREATECLUSTERC_HASH_SORT
2(IDNUMBER,CREATEDDATESORT)
3HASHKEYSSIZE;聚合表单。
Clustercreated.
SQL >CREATETABLET_HASH_SORT
2(IDNUMBER,CREATEDDATESORT,NAMEVARCHAR2(30))
3CLUSTERC_HASH_SORT(ID,CREATED);
表已创建。
SQL>BEGIN
2FORIIN1、.LOOP聚合表和明细表的区别。
3FORIIN1、.
4INSERTINTOT_HASH_SORT
5VALUES(I,SYSDATE-51+J,’OBJECT’|、I|、J);
6ENDLOOP;
7ENDLOOP;
8COMMIT;
9END;PL/SQLproceresuccessfullycompleted.
SQL>SELECTCOUNT(*)FROMT_HASH_SORT;
COUNT(*)
———-Next 什么样的查询可以从表中获得性能优势结构:
SQL>SETAUTOTON
SQL>ALTERSESSIONSETNLS_DATE_FORMAT=’YYYY-MM-DD:MI:SS’;
Sessionaltered。
SQL >SELECT*
2FROMT_HASH_SORT
3WHEREID=4ORDERBYCREATED;
IDCREATEDNAME
————————– ————– ——————-
-05-:30:07
-05-:30:07
-05-:30:07
-05-:30:07
-05-:30: 07
-05-:30:07
-05-:30:07、
-07-:30:07
-07-:30:07
执行计划
————— ————- ——————- ————-
Planhash值:
———- ——————– ——————————- ———-
|Id|操作|名称|行|字节|成本(%CPU)|
———————————- ——————————- —
|0、SELECTSTATEMENT|、23、|0(0) |
|*1、TABLEACCESSHASH|T_HASH_SORT|23、|、
———— ——————– ——————————- ——–
PredicateInformation(identifiedbyoperationid):
—————————————– ——— ———–
1-access(“ID”=)
—–
-用于此语句的动态采样
— —————————————– ——— —–
0recursivecalls
0dbblockgets
8consistentgets
0physicalreads
0redosize
bytessentviaSQL*Nettoclient
bytesreceivedviaSQL*Netfromclient
5SQL*Netroundtripsto/fromclient
0sorts(内存)
0sorts (disk)
可以看到上面的查询只执行了一次TABLEACCESSHASH,根本没有进行排序操作,因为数据本身是按照CREATED字段的顺序存储的。
SQL>CREATETABLET_NORMAL
2(IDNUMBER,CREATEDDATE,NAMEVARCHAR2(30));
表已创建。
SQL>BEGIN
2FORIIN1、.LOOP
3FORIIN1、.
4INSERTINTOT_NORMAL
5VALUES(I,SYSDATE-51+J,’OBJECT’|、I|、J);
6ENDLOOP;
7ENDLOOP;
8COMMIT;
9END;
PL/SQLproceres成功完成。
SQL>COMMIT;
提交完成。
SQL>SELECT*
2FROMT_NORMAL
3WHEREID=
4ORDERBYCREATED;
IDCREATEDNAME
———- ————————————————–
-05-:19:30
-05-:19:30
-05-:19:30
-05-:19:30
-05-:19:30、
-07-:19:30
-07-:19:30
执行计划
——- —————————————
Planhash值:
— ————————————————– ————————–
|Id|操作|名称|行|字节|成本(%CPU)|时间|————————————————- ——————————
|0、SELECTSTATEMENT|、96、|44(5)|00:00 :01、
|1、SORTORDERBY|、96、|44(5)|00:00:01、
|*2、TABLEACCESSFULL|T_NORMAL|96、 |43(3)|00:00:01、
———————————– ——————————————————–
PredicateInformation(identifiedby operationid ):
———————————————————- —–
2-filter(“ID”=)
—–
-用于此语句的动态采样
——— ————————————————–
0recursivecalls
0dbblockgets
consistentgets
0physicalreads
0redosize
bytessentviaSQL*Nettoclient
bytesreceivedviaSQL*Netfromclient
5SQL*Netroundtripsto/fromclient
1sorts(memory)
0sorts (磁盘)
对于普通的表,不仅要扫描表,还要进行排序操作,成本要高很多。
当然,普通表可以添加索引来改善这种情况:
SQL>CREATEINDEXIND_T_NORMALONT_NORMAL(ID,CREATED);
Indexcreated.
SQL>SELECT*
2FROMT_NORMAL
3WHEREID=
4订单创建;
IDCREATEDNAME
——————————————- – —————-
-05-:19:30
-05-:19:30
-05-:19:30
– 05-:19:30
-05-:19:30、
-07-:19:30
-07-:19:30
执行计划
– ————————————————– – ——
Planhash值:
———————————- ————- ————————————- ————- ——
|Id|操作|名称|行|字节|成本(%CPU)|时间|
— ————- ————————————- ————- ————
|0、SELECTSTATEMENT|、50、|3( 0)|00:00:01、
| 1、TABLEACCESSBYINDEXROWID|T_NORMAL|50、|3(0)|00:00:01、
|*2、INDEXRANGESCAN|IND_T_NORMAL|50、|2(0)|00:00:01、
— ————————————————– —————————————————-
谓词信息(由操作ID识别):————————————————- —
2-access(“ID”=)
过滤器(“ID”=)
-用于此语句的动态采样
— ————————————————– ——
0recursivecalls
0dbblockgets
0physicalreads
0redosize
bytessentviaSQL*Nettoclient
bytesreceivedviaSQL*Netfromclient
5SQL*Netroundtripsto/fromclient
0sorts( memory)
0sorts(disk)
即使添加的索引需要比HASHSORTCLUSTER更多的物理读取,因为Oracle首先需要访问索引,在索引中找到对应的键值,然后根据到索引的ROWID。这种操作的成本远高于通过HASH算法直接查找表的行记录的成本。
当然,普通的表索引具有更好的灵活性,使用的情况也越来越灵活,而 HASHSORTCLUSTER 只对特定的查询有效。查询必须提供 HASH 键值列的值,并且指定的列必须是排序的。 .
1、 Polywatch:手表团购商城有哪些?介绍几个2、 Polysurface:什么是polysurface剂?3、聚合表:如何聚合表项先看看如何创建HASHSORTCLUSTER:
SQL>CREATECLUSTERC_HASH_SORT
2(IDNUMBER,CREATEDDATESORT)
3HASHKEYSSIZE;
Clustercreated.
SQL >CREATETABLET_HASH_SORT
2(IDNUMBER,CREATEDDATESORT,NAMEVARCHAR2(30))
3CLUSTERC_HASH_SORT(ID,CREATED);
表已创建。
SQL>BEGIN
2FORIIN1、.LOOP
3FORIIN1、.
4INSERTINTOT_HASH_SORT
5VALUES(I,SYSDATE-51+J,’OBJECT’|、I|、J);
6ENDLOOP;
7ENDLOOP;
8COMMIT;
9END;PL/SQLproceresuccessfullycompleted.
SQL>SELECTCOUNT(*)FROMT_HASH_SORT;
COUNT(*)
———-Next 什么样的查询可以从表中获得性能优势结构:
SQL>SETAUTOTON
SQL>ALTERSESSIONSETNLS_DATE_FORMAT=’YYYY-MM-DD:MI:SS’;
Sessionaltered。
SQL >SELECT*
2FROMT_HASH_SORT
3WHEREID=4ORDERBYCREATED;
IDCREATEDNAME
————————– ————– ——————-
-05-:30:07
-05-:30:07
-05-:30:07
-05-:30:07
-05-:30: 07
-05-:30:07
-05-:30:07、
-07-:30:07
-07-:30:07
执行计划
————— ————- ——————- ————-
Planhash值:
———- ——————– ——————————- ———-
|Id|操作|名称|行|字节|成本(%CPU)|
———————————- ——————————- —
|0、SELECTSTATEMENT|、23、|0(0) |
|*1、TABLEACCESSHASH|T_HASH_SORT|23、|、
———— ——————– ——————————- ——–
PredicateInformation(identifiedbyoperationid):
—————————————– ——— ———–
1-access(“ID”=)
—–
-用于此语句的动态采样
— —————————————– ——— —–
0recursivecalls
0dbblockgets
8consistentgets
0physicalreads
0redosize
bytessentviaSQL*Nettoclient
bytesreceivedviaSQL*Netfromclient
5SQL*Netroundtripsto/fromclient
0sorts(内存)
0sorts (disk)
可以看到上面的查询只执行了一次TABLEACCESSHASH,根本没有进行排序操作,因为数据本身是按照CREATED字段的顺序存储的。
SQL>CREATETABLET_NORMAL
2(IDNUMBER,CREATEDDATE,NAMEVARCHAR2(30));
表已创建。
SQL>BEGIN
2FORIIN1、.LOOP
3FORIIN1、.
4INSERTINTOT_NORMAL
5VALUES(I,SYSDATE-51+J,’OBJECT’|、I|、J);
6ENDLOOP;
7ENDLOOP;
8COMMIT;
9END;
PL/SQLproceres成功完成。
SQL>COMMIT;
提交完成。
SQL>SELECT*
2FROMT_NORMAL
3WHEREID=
4ORDERBYCREATED;
IDCREATEDNAME
———- ————————————————–
-05-:19:30
-05-:19:30
-05-:19:30
-05-:19:30
-05-:19:30、
-07-:19:30
-07-:19:30
执行计划
——- —————————————
Planhash值:
— ————————————————– ————————–
|Id|操作|名称|行|字节|成本(%CPU)|时间|————————————————- ——————————
|0、SELECTSTATEMENT|、96、|44(5)|00:00 :01、
|1、SORTORDERBY|、96、|44(5)|00:00:01、
|*2、TABLEACCESSFULL|T_NORMAL|96、 |43(3)|00:00:01、
———————————– ——————————————————–
PredicateInformation(identifiedby operationid ):
———————————————————- —–
2-filter(“ID”=)
—–
-用于此语句的动态采样
——— ————————————————–
0recursivecalls
0dbblockgets
consistentgets
0physicalreads
0redosize
bytessentviaSQL*Nettoclient
bytesreceivedviaSQL*Netfromclient
5SQL*Netroundtripsto/fromclient
1sorts(memory)
0sorts (磁盘)
对于普通的表,不仅要扫描表,还要进行排序操作,成本要高很多。
当然,普通表可以添加索引来改善这种情况:
SQL>CREATEINDEXIND_T_NORMALONT_NORMAL(ID,CREATED);
Indexcreated.
SQL>SELECT*
2FROMT_NORMAL
3WHEREID=
4订单创建;
IDCREATEDNAME
——————————————- – —————-
-05-:19:30
-05-:19:30
-05-:19:30
– 05-:19:30
-05-:19:30、
-07-:19:30
-07-:19:30
执行计划
– ————————————————– – ——
Planhash值:
———————————- ————- ————————————- ————- ——
|Id|操作|名称|行|字节|成本(%CPU)|时间|
— ————- ————————————- ————- ————
|0、SELECTSTATEMENT|、50、|3( 0)|00:00:01、
| 1、TABLEACCESSBYINDEXROWID|T_NORMAL|50、|3(0)|00:00:01、
|*2、INDEXRANGESCAN|IND_T_NORMAL|50、|2(0)|00:00:01、
— ————————————————– —————————————————-
谓词信息(由操作ID识别):————————————————- —
2-access(“ID”=)
过滤器(“ID”=)
-用于此语句的动态采样
— ————————————————– ——
0recursivecalls
0dbblockgets
0physicalreads
0redosize
bytessentviaSQL*Nettoclient
bytesreceivedviaSQL*Netfromclient
5SQL*Netroundtripsto/fromclient
0sorts( memory)
0sorts(disk)
即使添加的索引需要比HASHSORTCLUSTER更多的物理读取,因为Oracle首先需要访问索引,在索引中找到对应的键值,然后根据到索引的ROWID。这种操作的成本远高于通过HASH算法直接查找表的行记录的成本。
当然,普通的表索引具有更好的灵活性,使用的情况也越来越灵活,而 HASHSORTCLUSTER 只对特定的查询有效。查询必须提供 HASH 键值列的值,并且指定的列必须是排序的。 .
.pjbox{padding-top:8px;text-align:center}.pjbox a{cursor:pointer;color:#000} 收藏 / 推荐(41) / 要加油(6)