2012-07-05 39 views
22

Trong MySQL, khi tôi tạo khóa chính kết hợp, hãy nói với các cột X, Y, Z, thì cả ba cột sẽ tự động trở thành chỉ mục. Điều tương tự cũng xảy ra với Postgres?Khóa chính hỗn hợp PostgreSQL

+2

Bạn có nghĩa là MySQL tạo ** ba ** * chỉ mục * không? Âm thanh hết sức kỳ lạ –

Trả lời

52

Nếu bạn tạo khóa chính kết hợp, trên (x, y, z), PostgreSQL thực hiện việc này với sự trợ giúp của một chỉ mục nhiều cột UNIQUE trên (x, y, z). Ngoài ra, tất cả ba cột phải là NOT NULL, tất nhiên, đó là sự khác biệt chính giữa một số PRIMARY KEYUNIQUE INDEX.

Bên cạnh những hạn chế rõ ràng trên dữ liệu của bạn, multi-column index cũng có ảnh hưởng phần nào khác nhau về việc thực hiện các truy vấn hơn ba chỉ số cá nhân trên x, yz.

Chúng tôi đã thảo luận rất kỹ lưỡng về gần đây on dba.SE in this related question. Với các ví dụ, điểm chuẩn, thảo luận và triển vọng cho tính năng sắp tới của index-only scans in version 9.2.

Cụ thể, khóa chính trên (x, y, z) sẽ tăng tốc truy vấn với các điều kiện trên x, (x,y) hoặc (x,y,z) tối ưu. Nó cũng sẽ trợ giúp với các truy vấn trên y, z, (y,z) hoặc (x,z) nhưng đến một mức độ thấp hơn nhiều.

Nếu bạn cần tăng tốc truy vấn trên các kết hợp sau, bạn có thể muốn tạo một hoặc nhiều chỉ mục bổ sung.

2

Yes:

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

+1

Tôi nghĩ câu hỏi là liệu mỗi cột có chỉ mục riêng của nó hay không. –

+0

Đồng ý. Câu hỏi không phải là nếu 1 chỉ số đa lõi được tạo tự động nhưng tốt nếu 3 chỉ mục cột đơn được tạo. Và câu trả lời là không. Câu trả lời của bạn vẫn có liên quan vì nó cung cấp thông tin bổ sung, sau khi được chỉnh sửa tất nhiên. Trong thực tế, câu trả lời của @ dondi-michael-stroma có liên quan nhiều hơn cái đã được người yêu cầu ban đầu chọn. – Chucky

1

Không, bạn nhận được một chỉ mục cho khóa chính ba cột.

Các vấn đề liên quan