ads 728x90 B

(ORA-00019) - Tại sao INSERT nhanh hơn DELETE?

Insert and Delete EXECUTION PLAN:

Tại sao Insert lại nhanh hơn Delete?
  • Trong khi chúng ta thực hiện một lệnh xóa (delete) bất kỳ hàng thì Oracle tiến hành tìm kiếm giá trị đó từ tablespace, index,... Nhưng nếu trong khi ta thực hiện chèn (insert) bất kỳ hàng dữ liệu nào vào thì Oracle chỉ việc mang nó vào đúng table được chỉ định.
  • Cả chèn và xóa được sử dụng cho nhiều mục đích khác nhau và chèn không phải lúc nào cũng nhanh hơn xóa. Nếu table đó đã được đánh index thì chèn sẽ chậm và xóa sẽ thực hiện nhanh chóng (nếu mệnh đề WHERE được cột có index). Nếu table đó không có bất kỳ index nào thì insert sẽ nhanh và delete sẽ chậm.
  • Chèn nhanh hơn xóa bởi vì chèn chỉ cần thêm dòng dữ liệu vào bảng nhưng xóa vẫn còn giữ lại logs trong bộ nhớ(memory).
 Hãy cùng kiểm tra Execution Plan đối với lệnh Insert và Delete!

SQL> EXPLAIN PLAN FOR
     INSERT INTO DUP_TEST (ID, NAME) VALUES (106, 'Plan');


SQL> SELECT PLAN_TABLE_OUTPUT
     FROM TABLE(DBMS_XPLAN.DISPLAY (FORMAT=>'ALL +OUTLINE'));


PLAN_TABLE_OUTPUT 
-------------------------------------------------------------------------------------
| Id  | Operation                | Name     | Rows  | Bytes | Cost (%CPU)| Time     |
-------------------------------------------------------------------------------------
|   0 | INSERT STATEMENT         |          |     1 |    11 |     1   (0)| 00:00:01 |
|   1 |  LOAD TABLE CONVENTIONAL | DUP_TEST |       |       |            |          |
-------------------------------------------------------------------------------------

Query Block Name / Object Alias (identified by operation id):
-------------------------------------------------------------

   1 - INS$1
SQL> EXPLAIN PLAN FOR 
     DELETE DUP_TEST WHERE ID = 102;

SQL> SELECT PLAN_TABLE_OUTPUT
     FROM TABLE(DBMS_XPLAN.DISPLAY (FORMAT=>'ALL +OUTLINE'));


PLAN_TABLE_OUTPUT                                                              
Plan hash value: 2603986714

-------------------------------------------------------------------------------
| Id  | Operation          | Name     | Rows  | Bytes | Cost (%CPU)| Time     |
-------------------------------------------------------------------------------
|   0 | DELETE STATEMENT   |          |     1 |     4 |     3   (0)| 00:00:01 |
|   1 |  DELETE            | DUP_TEST |       |       |            |          |
|*  2 |   TABLE ACCESS FULL| DUP_TEST |     1 |     4 |     3   (0)| 00:00:01 |
-------------------------------------------------------------------------------

Query Block Name / Object Alias (identified by operation id):
-------------------------------------------------------------

   1 - DEL$1
   2 - DEL$1 / DUP_TEST@DEL$1

Outline Data
-------------

  /*+
      BEGIN_OUTLINE_DATA
      FULL(@"DEL$1" "DUP_TEST"@"DEL$1")
      OUTLINE_LEAF(@"DEL$1")
      ALL_ROWS
      OPT_PARAM('star_transformation_enabled' 'true')
      DB_VERSION('12.1.0.2')
      OPTIMIZER_FEATURES_ENABLE('12.1.0.2')
      IGNORE_OPTIM_EMBEDDED_HINTS
      END_OUTLINE_DATA
  */

Predicate Information (identified by operation id):
---------------------------------------------------

   2 - filter("ID"=102)

Column Projection Information (identified by operation id):
-----------------------------------------------------------

   2 - (cmp=2) "DUP_TEST".ROWID[ROWID,10], "ID"[NUMBER,22]
Chú ý các chỉ số và dựa vào đó ta có thể có cái nhìn tổng quan về chi phí thực thi của Insert & Delete:
- OPERATION: Tên của hoạt động được thực hiện bên trong bước này. Đối với hàng đầu tiên của cột này sẽ có các giá trị như sau tùy câu lệnh SQL là gì:
  • DELETE STATEMENT
  • INSERT STATEMENT
  • SELECT STATEMENT
  • UPDATE STATEMENT
- NAME: Tên của đối tượng được sử dụng trong Execution Plan này. Trong trường hợp này là table DUP_TEST
- BYTES: Số byte ước tính mà trình tối ưu hóa truy vấn thực thi.
- COST CPU: Chi phí CPU ước tính mà trình tối ưu hóa truy vấn thực thi.
- TIME: Thời gian ước tính mà trình tối ưu hóa truy vấn thực thi, theo định dạng HH:MM:SS.


Hãy tham gia và để lại nhận xét của bạn vào bên dưới. Càng nhiều người tham gia, chúng ta càng được hưởng lợi nhiều =)). Vì vậy, để lại những suy nghĩ của bạn trước khi rời khỏi trang nhé.
(ORA-00019) - Tại sao INSERT nhanh hơn DELETE? (ORA-00019) - Tại sao INSERT nhanh hơn DELETE? Reviewed by Uit Lân on 12/16/2018 06:46:00 SA Rating: 5

Không có nhận xét nào:

ads 728x90 B
Được tạo bởi Blogger.