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

Có sự khác biệt về hiệu suất giữa concat vs || trong tiên tri

Tôi thiết lập một tập lệnh PL / SQL đơn giản (bên dưới) để thử cả hai tùy chọn nối trong vòng lặp 100 triệu lần mỗi tùy chọn. Kết quả cho || là 142,93 giây và CONCAT là 144,11 giây. Dù bằng cách nào, bạn đang nói về khoảng 1,4 micro giây cho mỗi hoạt động. Kết luận của tôi là dường như không có bất kỳ sự khác biệt đáng kể nào về hiệu suất.

Ngoài việc dễ đọc hơn, || là tiêu chuẩn ANSI cho toán tử nối.

DECLARE
   i NUMBER;
   j NUMBER := 100000000;
   v VARCHAR2 (1000);
   v_start TIMESTAMP := SYSTIMESTAMP;
BEGIN
   FOR i IN 1 .. j LOOP
      v := DBMS_RANDOM.VALUE () || DBMS_RANDOM.VALUE ();
   END LOOP;    
   DBMS_OUTPUT.put_line ('1: ' || (SYSTIMESTAMP - v_start));
END;

DECLARE
   i NUMBER;
   j NUMBER := 100000000;
   v VARCHAR2 (1000);
   v_start TIMESTAMP := SYSTIMESTAMP;
BEGIN
   FOR i IN 1 .. j LOOP
      v := CONCAT (DBMS_RANDOM.VALUE (), DBMS_RANDOM.VALUE ());
   END LOOP;    
   DBMS_OUTPUT.put_line ('2: ' || (SYSTIMESTAMP - v_start));
END;

Dưới dạng chú thích cuối trang, Oracle nói điều này về mục đích của CONCAT chức năng:



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Chia chuỗi theo khoảng trắng và ký tự làm dấu phân cách trong Oracle với regexp_substr

  2. Các câu lệnh DDL có luôn cung cấp cho bạn một cam kết ngầm hay bạn có thể nhận được một lần khôi phục ngầm không?

  3. Ngoại lệ định dạng Ngày Oracle trong Dịch vụ Báo cáo Máy chủ SQL

  4. Cấp thay đổi chỉ trên một cột trong bảng

  5. Chuẩn bị dữ liệu thử nghiệm trên Oracle với cột blob