2010-11-08 31 views
56

Tôi có một bảng và tôi đang cố thêm một chỉ mục duy nhất trên hai cột. Các cột đó cũng được lập chỉ mục. Vì vậy, câu hỏi của tôi là nếu tôi chỉ có thể loại bỏ các chỉ số người đã chỉ cho một cột hoặc nếu tôi phải sử dụng tất cả ba chỉ số:Cách triển khai chỉ mục duy nhất trên hai cột trong đường ray

add_index "subscriptions", ["user_id"] 
add_index "subscriptions", ["content_id"] 
add_index "subscriptions", ["user_id"], ["content_id"], :unique => true 

Cảm ơn để làm rõ của bạn Markus

+5

Như một mặt lưu ý : Nếu bạn đang sử dụng MySQL, không có nghĩa là bạn có 'used_id' và' content_id' trong các chỉ mục riêng biệt nếu bạn cũng có một chỉ mục duy nhất của cả hai cột. Điều này cũng có thể áp dụng cho các DB khác ... Trái ngược với những gì bạn mong đợi, nó sẽ có tác động tiêu cực đến hiệu suất (đặc biệt là chèn/cập nhật). – hurikhan77

Trả lời

126
add_index :subscriptions, [:user_id, :content_id], unique: true 
+6

Có cú pháp thay thế cũng như: add_index: đăng ký, [: user_id,: CONTENT_ID],: độc đáo => true add_index: đăng ký,% w (CONTENT_ID user_id),: độc đáo => true Họ là cùng một điều, chỉ cú pháp khác nhau để chỉ định các cột. –

+12

@ FrançoisBeausoleil '% w (user_id content_id)' trong ruby ​​chỉ tạo ra một chuỗi các chuỗi, nó không đặc biệt cho đường ray. Bạn có thể làm tương tự với '" user_id content_id ".split' vẫn đang tạo một mảng các chuỗi. Tôi chắc chắn bạn biết điều này, bình luận này chỉ là để người đọc khác không liên quan đến điều này để ray không chính xác :) –

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