Cách triển khai một chỉ mục duy nhất trên hai cột trong đường ray


95

Tôi có một bảng và tôi đang cố gắng 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à liệu tôi có thể loại bỏ các chỉ mục chỉ dành cho một cột hay nếu tôi phải sử dụng cả ba chỉ mục:

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

5
Một lưu ý phụ: Nếu bạn đang sử dụng MySQL, không có ý nghĩa gì khi có chỉ mục của bạn used_idcontent_idtrong 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ó lẽ cũng á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à các chèn / cập nhật).
hurikhan77

Câu trả lời:


186
add_index :subscriptions, [:user_id, :content_id], unique: true

6
Ngoài ra còn có các cú pháp thay thế: add_index: subscribe, [: user_id,: content_id],: unique => true add_index: subscribe,% w (user_id content_id),: unique => true Chúng giống nhau, chỉ khác cú pháp để xác định các cột.
François Beailsil

14
@ FrançoisBeaosystemil %w(user_id content_id)trong ruby ​​chỉ tạo ra một mảng chuỗi, nó không đặc biệt với đường ray. Bạn có thể làm tương tự với cách "user_id content_id".splitvẫn tạo một mảng chuỗi. Tôi chắc rằng bạn biết điều này, nhận xét này chỉ là để các độc giả khác không liên hệ điều này với đường ray một cách sai lầm :)
Khaja Minhajuddin

Cú pháp cho điều này khi tạo bảng là gì? <- câu trả lời đã tìm thấy ( stackoverflow.com/questions/4870961/… )
tnaught

Tôi đang gặp vấn đề kỳ lạ sau khi sử dụng cái này. Không thể chạy bất kỳ quá trình di chuyển mới nào bằng rake db: migrate. Chỉ có thể chạy quá trình di chuyển bằng số phiên bản rake db: migrate: up VERSION = 20180411062714 mỗi lần một tệp. Tôi đã có dữ liệu trên bảng mà tôi đã làm đúng duy nhất trên hai cột.
thedudecodes

@ FrançoisBeaosystemil Chà, thực ra chúng không giống nhau, %w(user_id content_id)là một Mảng chuỗi. Cái nào giống với ['user_id', 'content_id']. Ký hiệu khác nhau cho Mảng ký hiệu là %i(user_id content_id), hoặc như OP đã viết nó[:user_id, :content_id]
Sasa Blagojević
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.