- vừa được xem lúc

Tăng tốc database phần 15.3 Indexing NULL trong Oracle - Giả lập Partial Indexes trong Oracle

0 0 10

Người đăng: Nguyễn Đình Nghĩa

Theo Viblo Asia

Các bạn có thể xem bài trước tại đây

Với tính chất không index NULL của Oracle, có thể giả lập partial index bằng cách tạo một hàm trả về NULL cho những bản ghi không cần index. Giả sử chúng ta cần tạo một Partial Indexes như sau:

CREATE INDEX messages_todo ON messages (receiver) WHERE processed = 'N'

Với câu lệnh trên chúng ta chỉ muốn index những bản ghi chưa được thực hiện (processed='N'). Để làm điều này chúng ta cần tạo một function trả về RECEIVER chỉ khi PROCESSED='N'

CREATE OR REPLACE
FUNCTION pi_processed(processed CHAR, receiver NUMBER)
RETURN NUMBER
DETERMINISTIC
AS BEGIN IF processed IN ('N') THEN RETURN receiver; ELSE RETURN NULL; END IF;
END

Function trên là deterministic nên có thể index trên function đó đươc. Chúng ta sẽ tạo index trên function này, và sẽ được được kết quả giống với partial index

CREATE INDEX messages_todo ON messages (pi_processed(processed, receiver))

Để sử dụng index này cần truy vấn như sau

SELECT message FROM messages WHERE pi_processed(processed, receiver) = ?
----------------------------------------------------------
|Id | Operation | Name | Cost |
----------------------------------------------------------
| 0 | SELECT STATEMENT | | 5330 |
| 1 | TABLE ACCESS BY INDEX ROWID| MESSAGES | 5330 |
|*2 | INDEX RANGE SCAN | MESSAGES_TODO | 5303 |
---------------------------------------------------------- Predicate Information (identified by operation id):
--------------------------------------------------- 2 - access("PI_PROCESSED"("PROCESSED","RECEIVER")=:X)

Mình có lập group Standard Dev các bạn có thể Join để xây dựng một cộng đồng lập trình viên level quốc tế nhé! Ngoài ra mình nhận tư vấn, đào tạo, hỗ trợ các vấn đề khó hoặc hiệu năng cho các sản phẩm, bạn nào có nhu cầu có thể liên hệ mình nhé! email nghiand1010@gmail.com

Bình luận

Bài viết tương tự

- vừa được xem lúc

Mô hình quan hệ - thực thể (Entity – Relationship Model)

Mô hình quan hệ thực thể (Entity Relationship model - E-R) được CHEN giới thiệu vào năm 1976 là một mô hình được sử dụng rộng rãi trong các bản thiết kế cơ sở dữ liệu ở mức khái niệm, được xây dựng dựa trên việc nhận thức thế giới thực thông qua tập các đối tượng được gọi là các thực thể và các mối

0 0 117

- vừa được xem lúc

[Embulk #1] Công cụ giúp giảm nỗi đau chuyển đổi dữ liệu

Embulk là gì. Embulk là một công cụ open source có chức năng cơ bản là load các record từ database này và import sang database khác.

0 0 40

- vừa được xem lúc

Window Functions trong MySQL, Nâng cao và cực kì hữu dụng (Phần II).

Chào mọi người, lại là mình đây, ở phần trước mình đã giới thiệu với mọi người về Window Functions Phần I. Nếu chưa rõ nó là gì thì mọi người nên đọc lại trước nha, để nắm được định nghĩa và các key words, tránh mắt chữ O mồm chứ A vì phần này mình chủ yếu sẽ thực hành với các Window Functions.

0 0 90

- vừa được xem lúc

Window Functions trong MySQL, Nâng cao và cực kì hữu dụng (Phần I).

Chào mọi người, mình mới tìm hiểu đc topic Window Functions cá nhân mình cảm thấy khá là hay và mình đánh giá nó là phần nâng cao. Vì ít người biết nên Window Functions thấy rất ít khi sử dụng, thay vì đó là những câu subquery dài dằng dặc như tin nhắn nhắn cho crush, và người khác đọc hiểu được câu

0 0 897

- vừa được xem lúc

Disable và Enable trigger trong Oracle

Origin post: https://www.tranthanhdeveloper.com/2020/12/disable-va-enable-trigger-trong-oracle.html.

0 0 29

- vừa được xem lúc

Lưu trữ dữ liệu với Data Store

. Data Store là một trong những componet của bộ thư viện Android JetPack, nó là một sự lựa chọn hoàn hảo để thay thế cho SharedPreferences để lưu trữ dữ liệu đơn giản dưới dạng key-value. Chúng ta cùng làm một so sánh nhỏ để thấy sự tối ưu của Data Store với SharedPreferences nhé.

0 0 61