Oracle
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Oracle

Hiệu suất của SUBSTR trên CLOB

(Nói dối, chết tiệt dối trá, và điểm chuẩn ...)

Tôi đã chạy lại bài kiểm tra của bạn 10 lần, mở rộng chuỗi để nó dài đầy đủ 30 ký tự và nhận được kết quả trung bình sau:

+000000000 00:00:00.011694200 (VARCHAR2)
+000000000 00:00:00.901000600 (CLOB SUBSTR)
+000000000 00:00:00.013169200 (DBMS_LOB.SUBSTR)

Sau đó, tôi đã thay đổi phạm vi chuỗi con thành 5,14 (14,5 cho DBMS_LOB.SUBSTR) và nhận được:

+000000000 00:00:00.011731000 (VARCHAR2)
+000000000 00:00:01.010840000 (CLOB SUBSTR)
+000000000 00:00:00.011427000 (DBMS_LOB.SUBSTR)

Sau đó, tôi đã thay đổi phạm vi thành 17,14 (14,17 cho DBMS_LOB.SUBSTR) và nhận được

+000000000 00:00:00.013578900 (VARCHAR2)
+000000000 00:00:00.964527400 (CLOB SUBSTR)
+000000000 00:00:00.011416800 (DBMS_LOB.SUBSTR)

Cuối cùng, tôi đã thay đổi phạm vi thành 25,14 (14,25 cho DBMS_LOB.SUBSTR) và nhận được

+000000000 00:00:00.011210200 (VARCHAR2)
+000000000 00:00:00.916439800 (CLOB SUBSTR)
+000000000 00:00:00.013781300 (DBMS_LOB.SUBSTR)

Kết luận của tôi là khi làm việc với CLOB, tốt nhất là sử dụng DBMS_LOB.SUBSTR vì nó dường như không có hình phạt hiệu quả so với việc sử dụng SUBSTR đối với VARCHAR2 "bình thường". SUBSTR chống lại CLOB dường như phải chịu một hình phạt về hiệu suất đáng kể. Đối với bản ghi - OS =HP / UX (biến thể Unix), phiên bản Oracle =11.1, bộ xử lý =HP Itanium 2-plex. YMMV.

Chia sẻ và tận hưởng.

Và bởi vì nếu nó đáng làm thì nó đáng làm quá, đây là một số kết quả khác với các chuỗi được mở rộng thành 32767 ký tự. Phạm vi chuỗi con được đưa ra với mỗi tập kết quả:

1, 25000
+000000000 00:00:00.198466400 (VARCHAR2)
+000000000 00:00:02.870958700 (CLOB SUBSTR)
+000000000 00:00:00.174490100 (DBMS_LOB.SUBSTR)

1000, 25000
+000000000 00:00:00.253447900 (VARCHAR2)
+000000000 00:00:02.491790500 (CLOB SUBSTR)
+000000000 00:00:00.193560100 (DBMS_LOB.SUBSTR)

10000, 25000
+000000000 00:00:00.217812000 (VARCHAR2)
+000000000 00:00:02.268794800 (CLOB SUBSTR)
+000000000 00:00:00.222200200 (DBMS_LOB.SUBSTR)

Cùng ngày, cùng một kết luận.

Cthulhu fhtagn.

(Một lần nữa vi phạm, các bạn thân mến, một lần nữa ...)

Chạy lại các điểm chuẩn, thay đổi kích thước của CLOB thành 3276700 và lấy chuỗi con từ giữa bắt đầu từ 2475000 cho chiều dài 25000, tôi nhận được:

+000000000 00:00:00.176883200 (VARCHAR2)
+000000000 00:00:02.069482600 (CLOB SUBSTR)
+000000000 00:00:00.175341500 (DBMS_LOB.SUBSTR)

(Lưu ý rằng các thay đổi chỉ ảnh hưởng đến hai lần kiểm tra cuối cùng).

VÀ ... cùng một kết quả, khác ngày.

YMMV.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Các kiểu dữ liệu Oracle

  2. Oracle:trình tự MySequence.currval chưa được xác định trong phiên này

  3. Gọi một thủ tục PL / SQL khác trong một thủ tục

  4. Zip sử dụng Thủ tục lưu trữ Oracle

  5. Cách tìm Lịch sử chờ đợi của phiên Oracle