Quản trị index trong postgresql

Quản trị chỉ mục (index) trong PostgreSQL là một phần quan trọng của việc tối ưu hóa hiệu suất truy vấn. Dưới đây là một số tác vụ cơ bản liên quan đến quản trị chỉ mục trong PostgreSQL:

Xem chỉ mục của bảng

Để xem danh sách các chỉ mục của một bảng, bạn có thể sử dụng lệnh \di trong psql hoặc truy vấn từ pg_indexes.

\di table_name

SELECT indexname, indexdef FROM pg_indexes WHERE tablename = 'table_name';

Tạo chỉ mục

Để tạo một chỉ mục trên một cột hoặc một tập hợp các cột trong bảng, bạn sử dụng câu lệnh CREATE INDEX.

CREATE INDEX index_name ON table_name (column_name);

Trong đó index_name là tên của chỉ mục, table_name là tên của bảng và column_name là tên của cột mà bạn muốn tạo chỉ mục.

CREATE [ UNIQUE ] INDEX [ CONCURRENTLY ] [ [ IF NOT EXISTS ] name ] ON table_name [ USING method ] ( column_name [ COLLATE collation ] [ opclass ] [ ASC | DESC ] [ NULLS { FIRST | LAST } ] [, ...] ) [ TABLESPACE tablespace_name ] [ WHERE predicate ];

CONCURRENTLY: trong quá trình tạo index mà không lock bảng, vẫn cho ghi lên bảng.

USING: sử dụng thuật toán nào để tạo index (btree, hash….)

Xóa chỉ mục

DROP INDEX index_name;

Trong đó index_name là tên của chỉ mục bạn muốn xóa.

Thay đổi chỉ mục

Bạn có thể thay đổi một chỉ mục bằng cách đổi tên của nó hoặc sử dụng câu lệnh ALTER INDEX để thêm hoặc loại bỏ các thuộc tính của chỉ mục.

PostgreSQL cung cấp nhiều loại index khác nhau để tối ưu hóa hiệu suất truy vấn cho các trường dữ liệu khác nhau. Mỗi loại index có những ưu điểm và nhược điểm riêng, phù hợp với các trường hợp sử dụng cụ thể. Dưới đây là các loại index phổ biến trong PostgreSQL:

1. B-Tree Index:

  • Đây là loại index mặc định và được sử dụng phổ biến nhất trong PostgreSQL.
  • B-Tree index phù hợp cho các truy vấn tìm kiếm theo giá trị chính xác (=, >, <, >=, <=), phạm vi (BETWEEN, OVERLAPS), hoặc tiền tố (LIKE).
  • B-Tree index có cấu trúc cây cân bằng, giúp truy vấn nhanh chóng và hiệu quả.
  • Tuy nhiên, B-Tree index không hiệu quả cho các truy vấn tìm kiếm theo khoảng cách hoặc tương đồng văn bản.

2. Hash Index:

  • Hash index phù hợp cho các truy vấn tìm kiếm theo giá trị chính xác (=) trên các cột có giá trị duy nhất hoặc ít trùng lặp.
  • Hash index sử dụng bảng băm để ánh xạ giá trị truy vấn sang vị trí dữ liệu tương ứng, giúp truy vấn nhanh hơn B-Tree index cho các truy vấn tìm kiếm đơn giản.
  • Tuy nhiên, Hash index không hiệu quả cho các truy vấn tìm kiếm theo phạm vi hoặc tiền tố.
  • Hash index cũng có thể tốn nhiều dung lượng hơn B-Tree index cho các cột có nhiều giá trị trùng lặp.

3. GIST Index:

  • GIST index được thiết kế để tối ưu hóa truy vấn tìm kiếm theo khoảng cách hoặc vị trí địa lý.
  • GIST index sử dụng cấu trúc R-tree để lưu trữ dữ liệu theo vị trí địa lý, giúp truy vấn nhanh chóng các đối tượng gần nhau về mặt địa lý.
  • GIST index phù hợp cho các ứng dụng bản đồ, GIS, và các trường hợp cần tìm kiếm theo vị trí.
  • Tuy nhiên, GIST index không hiệu quả cho các truy vấn tìm kiếm theo giá trị chính xác hoặc phạm vi.

4. SP-GIST Index:

  • SP-GIST index là một biến thể của GIST index, hỗ trợ các truy vấn tìm kiếm phức tạp hơn theo khoảng cách, ví dụ như tìm kiếm các đối tượng nằm trong đa giác hoặc hình dạng không đều.
  • SP-GIST index sử dụng các thuật toán nâng cao để tối ưu hóa truy vấn cho các trường hợp sử dụng phức tạp.
  • SP-GIST index có thể tốn nhiều dung lượng và thời gian xử lý hơn GIST index cho các truy vấn đơn giản.

5. GIN Index:

  • GIN index được thiết kế để tối ưu hóa truy vấn tìm kiếm toàn văn bản, hỗ trợ tìm kiếm theo từ khóa, cụm từ, hoặc các truy vấn phức tạp hơn.
  • GIN index sử dụng cấu trúc inverted index để lưu trữ mối quan hệ giữa từ khóa và các tài liệu chứa từ khóa đó, giúp truy vấn nhanh chóng các tài liệu liên quan đến từ khóa.
  • GIN index phù hợp cho các ứng dụng tìm kiếm, phân tích văn bản, và các trường hợp cần tìm kiếm theo nội dung văn bản.
  • Tuy nhiên, GIN index có thể tốn nhiều dung lượng hơn các loại index khác và có thể chậm hơn cho các truy vấn tìm kiếm đơn giản.

 

Datalinks.vn

Hello các bạn, tôi là Dương Nguyễn (DuoDBA - https://www.youtube.com/@DuoDBA) tác giả của blog này. Mong muốn được chia sẻ kiến thức và kinh nghiệm về cơ sở dữ liệu với những người đam mê và quan tâm đến lĩnh vực này. Tôi có tổ chức các khoá Coaching về #OracleDatabase và luyện thi #OCP thường xuyên, các bạn muốn có người đồng hành thì alo tôi nhé. Call/Zalo: 0765 871 888. Thanks you !.....
0 0 đánh giá
Đánh giá bài viết
Theo dõi
Thông báo của
guest

0 Góp ý
Phản hồi nội tuyến
Xem tất cả bình luận