載入資料順序對HASH SORT CLUSTER效能影響
HASH SORT CLUSTER表由於資料是根據順序儲存的,因此載入或插入資料的順序對影響影響很大。
看一個最簡單的例子:
SQL> SET TIMING ON
SQL> CREATE CLUSTER C_HASH_SORT
2 (ID NUMBER, CREATED DATE SORT)
3 HASHKEYS 1000 SIZE 31500;
Cluster created.
Elapsed: 00:00:00.12
SQL> CREATE TABLE T_HASH_SORT
2 (ID NUMBER,
3 OWNER VARCHAR2(30),
4 OBJECT_NAME VARCHAR2(30),
5 OBJECT_TYPE VARCHAR2(30),
6 CREATED DATE SORT)
7 CLUSTER C_HASH_SORT (ID, CREATED);
Table created.
Elapsed: 00:00:00.01
SQL> INSERT INTO T_HASH_SORT
2 SELECT MOD(ROWNUM, 1000) ID,
3 OWNER,
4 OBJECT_NAME,
5 OBJECT_TYPE,
6 CREATED
7 FROM DBA_OBJECTS;
70767 rows created.
Elapsed: 00:00:01.69
SQL> DROP CLUSTER C_HASH_SORT INCLUDING TABLES;
Cluster dropped.
Elapsed: 00:00:00.39
SQL> CREATE CLUSTER C_HASH_SORT
2 (ID NUMBER, CREATED DATE SORT)
3 HASHKEYS 1000 SIZE 31500;
Cluster created.
Elapsed: 00:00:00.13
SQL> CREATE TABLE T_HASH_SORT
2 (ID NUMBER,
3 OWNER VARCHAR2(30),
4 OBJECT_NAME VARCHAR2(30),
5 OBJECT_TYPE VARCHAR2(30),
6 CREATED DATE SORT)
7 CLUSTER C_HASH_SORT (ID, CREATED);
Table created.
Elapsed: 00:00:00.01
SQL> INSERT INTO T_HASH_SORT
2 SELECT *
3 FROM
4 (
5 SELECT MOD(ROWNUM, 1000) ID,
6 OWNER,
7 OBJECT_NAME,
8 OBJECT_TYPE,
9 CREATED
10 FROM DBA_OBJECTS
11 )
12 ORDER BY ID, CREATED;
70767 rows created.
Elapsed: 00:00:00.58
對於無序資料的載入,載入7W條記錄花了將近1.7秒的時間,而如果對資料進行排序後載入,僅用了不到0.6秒的時間。
對於普通表而言,兩種方式的載入速度是一樣的:
SQL> CREATE TABLE T_NORMAL
2 (ID NUMBER,
3 OWNER VARCHAR2(30),
4 OBJECT_NAME VARCHAR2(30),
5 OBJECT_TYPE VARCHAR2(30),
6 CREATED DATE);
Table created.
Elapsed: 00:00:00.01
SQL> INSERT INTO T_NORMAL
2 SELECT MOD(ROWNUM, 1000) ID,
3 OWNER,
4 OBJECT_NAME,
5 OBJECT_TYPE,
6 CREATED
7 FROM DBA_OBJECTS;
70768 rows created.
Elapsed: 00:00:00.35
SQL> DROP TABLE T_NORMAL PURGE;
Table dropped.
Elapsed: 00:00:00.04
SQL> CREATE TABLE T_NORMAL
2 (ID NUMBER,
3 OWNER VARCHAR2(30),
4 OBJECT_NAME VARCHAR2(30),
5 OBJECT_TYPE VARCHAR2(30),
6 CREATED DATE);
Table created.
Elapsed: 00:00:00.01
SQL> INSERT INTO T_NORMAL
2 SELECT *
3 FROM
4 (
5 SELECT MOD(ROWNUM, 1000) ID,
6 OWNER,
7 OBJECT_NAME,
8 OBJECT_TYPE,
9 CREATED
10 FROM DBA_OBJECTS
11 )
12 ORDER BY ID, CREATED;
70768 rows created.
Elapsed: 00:00:00.35
顯然普通表載入要比HASH SORT CLUSTER表載入速度快,因為後者要進行更多的處理。
除了批次載入需要排序,對於HASH SORT CLUSTER表,隨後插入的記錄也應該滿足排序列的遞增順序,否則就會影響效率,並導致表中的資料不斷的變動。
SQL> DROP CLUSTER C_HASH_SORT INCLUDING TABLES;
Cluster dropped.
Elapsed: 00:00:00.27
SQL> CREATE CLUSTER C_HASH_SORT
2 (ID NUMBER, CREATED DATE SORT)
3 HASHKEYS 1000 SIZE 1100;
Cluster created.
Elapsed: 00:00:00.02
SQL> CREATE TABLE T_HASH_SORT
2 (ID NUMBER,
3 OWNER VARCHAR2(30),
4 OBJECT_NAME VARCHAR2(30),
5 OBJECT_TYPE VARCHAR2(30),
6 CREATED DATE SORT)
7 CLUSTER C_HASH_SORT (ID, CREATED);
Table created.
Elapsed: 00:00:00.00
SQL> BEGIN
2 FOR I IN 1..100 LOOP
3 FOR J IN 1..1000 LOOP
4 INSERT INTO T_HASH_SORT
5 VALUES (J, 'A', 'A', 'A', SYSDATE + I);
6 END LOOP;
7 END LOOP;
8 COMMIT;
9 END;
10 /
PL/SQL procedure successfully completed.
Elapsed: 00:00:03.80
SQL> DROP CLUSTER C_HASH_SORT INCLUDING TABLES;
Cluster dropped.
Elapsed: 00:00:00.27
SQL> CREATE CLUSTER C_HASH_SORT
2 (ID NUMBER, CREATED DATE SORT)
3 HASHKEYS 1000 SIZE 1100;
Cluster created.
Elapsed: 00:00:00.03
SQL> CREATE TABLE T_HASH_SORT
2 (ID NUMBER,
3 OWNER VARCHAR2(30),
4 OBJECT_NAME VARCHAR2(30),
5 OBJECT_TYPE VARCHAR2(30),
6 CREATED DATE SORT)
7 CLUSTER C_HASH_SORT (ID, CREATED);
Table created.
Elapsed: 00:00:00.01
SQL> BEGIN
2 FOR I IN 1..100 LOOP
3 FOR J IN 1..1000 LOOP
4 INSERT INTO T_HASH_SORT
5 VALUES (J, 'A', 'A', 'A', SYSDATE - I);
6 END LOOP;
7 END LOOP;
8 COMMIT;
9 END;
10 /
PL/SQL procedure successfully completed.
Elapsed: 00:00:04.03
對於HASH SORT CLUSTER表而言,應該滿足插入資料的遞增性,否則的話可能並不合適使用這個結構。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/4227/viewspace-610673/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- Sort_Buffer_Size 設定對伺服器效能的影響伺服器
- 容器化對資料庫的效能有影響嗎?資料庫
- 磁碟排序對Oracle資料庫效能的影響PT排序Oracle資料庫
- SpringBoot配置檔案優先順序載入順序Spring Boot
- cluster factor對執行計劃的影響
- Chrome下測試async/defer對指令碼載入執行順序的影響——跟你們說的有些不一樣Chrome指令碼
- Java父子類載入順序Java
- 資料庫的sort group by和hash group by資料庫
- 關於資料庫開啟大頁對效能的影響資料庫
- 影像延遲載入 && 列表圖順序載入
- [springboot]配置檔案載入順序Spring Boot
- Python 模組的載入順序Python
- 用hash cluster表提高查詢效能 (一)
- 效能優化之html、css、js三者的載入順序優化HTMLCSSJS
- return與finally的執行順序的影響(skycto JEEditor)
- Spring如何控制Bean的載入順序SpringBean
- DB2 HADR對效能的影響DB2
- 資訊圖:網頁載入速度到底對你的品牌有多大影響?網頁
- 順序表有序插入資料
- WPFDataGrid效能載入大資料大資料
- 使用者登入時的環境載入順序
- Script載入順序 & 外部樣式表的阻塞
- 哪些方面會影響伺服器資料庫效能伺服器資料庫
- 分支對程式碼效能的影響和優化優化
- 怎麼減少行鎖對效能的影響?
- 產品資料管理對ERP系統的影響
- 變更OS時間對資料庫的影響資料庫
- redis cluster 4.0.9 遷槽不影響讀寫Redis
- 類script標籤,非同步載入,順序執行非同步
- 伺服器IO瓶頸對MySQL效能的影響伺服器MySql
- 大資料預測分析是否對企業有影響大資料
- 聊聊虛擬化和容器對資料庫的影響資料庫
- 大資料對我們生活中的影響有哪些?大資料
- JVM類載入機制與類初始化順序JVM
- nginx的location匹配順序、優先順序,location對映衝突排查Nginx
- Cirium:資料揭示新冠肺炎對中國航空業的影響及對全球航空旅遊增長的影響
- Java中的Exception拋異常對效能的影響 - BaeldungJavaException
- .net core 拋異常對效能影響的求證之路
- 光大證券:疫情對食品飲料行業影響分析(附下載)行業