Làm thế nào để tôi biết những chỉ mục để tạo cho một bảng?


33

Có cách nào để tôi có thể tìm ra cách tốt nhất để biết chỉ mục nào sẽ tạo cho bảng không?


11
Có. Hãy thử sử dụng- the-index-luke.com chẳng hạn.
dezso

Câu trả lời tôi thấy nhiều nhất là bạn nên lập chỉ mục các khóa và cột chính mà bạn sử dụng trong WHEREmệnh đề.
Oskar Persson

Xin đừng làm vậy. Khóa chính xác định cách dữ liệu được sắp xếp vật lý trên bảng và nó có những cân nhắc riêng. Bạn phải chọn khóa chính rất cẩn thận vì nó cũng được sử dụng trong tất cả các chỉ mục khác của bạn. Tham khảo: sqlskills.com/bloss/kimberly/ Kẻ
Ali Razeghi

4
@AliRazeghi Điều đó (sắp xếp vật lý) là đúng trong một số DBMS nhất định (trong một số trường hợp nhất định) và không phải ở những người khác. Ví dụ, không đúng trong PostgreSQL.
dezso

Bỏ phiếu sao lưu!
Ali Razeghi

Câu trả lời:


29

Quy tắc ngắn của ngón tay cái. (Một số trong số này được tạo tự động, nhưng có thể được loại bỏ thủ công sau đó, tùy thuộc vào dbms của bạn. Đừng cho rằng bạn sẽ luôn làm việc trên PostgreQuery.)

  • Lập chỉ mục mỗi khóa chính.
  • Lập chỉ mục mỗi khóa ngoại.
  • Lập chỉ mục mỗi cột được sử dụng trong mệnh đề THAM GIA.
  • Lập chỉ mục mỗi cột được sử dụng trong mệnh đề WHERE.
  • Nghiên cứu tài liệu của bạn để tìm hiểu các tùy chọn lập chỉ mục "bí truyền" mà dbms của bạn hỗ trợ.

Mỗi khóa chính có nghĩa là các khóa chính nhiều cột phải có một chỉ mục duy nhất bao gồm tất cả các cột. PostgreSQL sẽ tự động tạo chỉ mục này nếu bạn khai báo khóa chính nhiều cột.

Có nhiều trường hợp trong đó một chỉ mục nhiều cột cung cấp cho bạn hiệu suất tốt hơn so với một số chỉ mục một cột. Theo dõi các truy vấn chậm và thực hiện kiểm tra để tìm ra cái nào là cái nào.

Giả sử rằng bất kỳ thay đổi nào đối với việc lập chỉ mục sẽ cải thiện một số hoạt động cơ sở dữ liệu và làm suy giảm các hoạt động khác. Tôi thấy hữu ích khi có một tập hợp các câu lệnh SQL mà tôi có thể cấu hình trước và sau khi thực hiện các thay đổi đối với các chỉ mục. Bộ này bao gồm các câu lệnh CHỌN, CHERTN, CẬP NHẬT và XÓA.

Không có sự thay thế nào cho việc nghiên cứu các tài liệu cho các dbms cụ thể của bạn.

  • TẠO INDEX
  • Chỉ mục (Lưu ý đặc biệt là các phần về biểu thức lập chỉ mục, trên chỉ mục một phần và kiểm tra việc sử dụng chỉ mục)

14

Ngoài những gì @Catcall đã cung cấp và thêm một sửa chữa nhỏ:

Gần đây tôi cũng đề cập đến một số điều cơ bản trong câu trả lời liên quan chặt chẽ này về SO .

Các câu trả lời cho đến nay dường như cho thấy bạn cần tạo các chỉ mục trên các khóa chính, nhưng đó không phải là trường hợp trong PostgreQuery (áp dụng ngoại lệ một phần). Tôi trích dẫn hướng dẫn ở đây :

PostgreSQL tự động tạo một chỉ mục duy nhất khi một ràng buộc duy nhất hoặc khóa chính được xác định cho một bảng. Các chỉ số bao gồm các cột tạo nên khóa chính hoặc hạn chế duy nhất (một chỉ số multicolumn, nếu thích hợp), và là cơ chế mà thi hành các hạn chế.

Nhấn mạnh đậm của tôi.

Bạn có thể muốn tạo các chỉ mục bổ sung cho các cột thứ hai hoặc sau của chỉ mục nhiều cột, nhưng cột đầu tiên thường được bao phủ tốt bởi chỉ mục nhiều màu - ngoại trừ khi các cột bổ sung làm cho chỉ mục lớn hơn nhiều. Chúng tôi đã thảo luận rằng rất chi tiết theo câu hỏi liên quan này:

Là một chỉ số tổng hợp cũng tốt cho các truy vấn trên trường đầu tiên?

Các chỉ mục nhiều màu , chỉ mục một phầnchỉ mục trên các biểu thức là các công cụ đặc biệt mạnh mẽ trong PostgreQuery. Vì PostgreQuery 9.2 cũng có các bản quét chỉ lập chỉ mục , tương đương với "bao gồm các chỉ mục" trong các RDBMS khác. Đây không phải là một loại chỉ mục khác, mà là một khả năng mới của RDBMS với các loại chỉ mục hiện có.

Mỗi chỉ số mang chi phí cụ thể , vì vậy không có cách nào xung quanh một số kiến ​​thức cơ bản để thực sự tối ưu hóa việc lập chỉ mục. Chỉ cần tạo ra nhiều chỉ mục có thể gây hại nhiều hơn là tốt. Đặc biệt, các chỉ mục có thể ngăn các bản cập nhật HOT cải thiện hiệu suất.

Nói chung, các hoạt động viết ( DELETE, UPDATE) trở nên đắt hơn (nhưng cũng có thể có lợi!), Trong khi các hoạt động đọc ( SELECT) thường chỉ mang lại lợi ích. Quá nhiều chỉ mục có thể làm cạn bộ nhớ cache để các thao tác đọc thậm chí có thể bị ảnh hưởng.

Cuối cùng, trang Wiki Postgres này về các tính năng bảo trì chỉ mục để tìm các chỉ mục trùng lặp hoặc không sử dụng (trong số những thứ khác).


Nếu tôi nhớ đúng, chỉ mục tự động qua PK cũng được tạo trên Oracle v.> = 10 và Sql Server> = 2008
EAmez

1

Có hai lựa chọn.

  1. Bạn làm nó.
  2. Công nghệ làm điều đó.

Câu trả lời cho việc tự làm là khá đầy đủ tài liệu ở đây. Vì vậy, hãy nhìn vào một cái gì đó khác.

Anh hùng

PGERO có thể hỗ trợ bạn nếu bạn muốn một số lời khuyên tự động.

Điều đó nói rằng nó có một số thiếu sót.

  1. Nó chỉ hoạt động trên WHEREORDER BY, không JOINS.
  2. Nó chỉ sử dụng số liệu thống kê về phần trăm NULL và các giá trị riêng biệt.

Kiểm tra video này để biết thêm thông tin .

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.