Vì vậy, tôi có một bảng yêu thích của người dùng. Có vài triệu hàng trong số đó.Cách hiệu quả để lưu trữ các mục có thể sắp xếp lại trong cơ sở dữ liệu
Hiện tại, chúng chỉ có ba cột: id
(pk), userId
và someFkRef
. Có một chỉ mục trên userId
để cho phép tôi chọn các mục ưa thích của người dùng một cách nhanh chóng.
Hiện tại, các đơn đặt hàng này được đặt hàng theo số id
chỉ hiệu quả là thứ tự chèn. Chúng tôi muốn cung cấp cho người dùng cơ hội để sắp xếp lại các mục yêu thích của họ, rất có thể thông qua một số loại tương tác kéo và thả.
Cách tiếp cận đầu tiên (và tôi nghi ngờ ngây thơ) của tôi là chỉ cần thêm một cột order
và chỉ mục tổng hợp trên userId
, order
. Tuy nhiên, khi phản ánh, khi người dùng di chuyển mục của họ một khoảng cách nào đó trong danh sách, tất cả các hàng trung gian giữa vị trí bắt đầu của mục và vị trí kết thúc sẽ cần cột order
được tính toán lại và do đó, chỉ mục cũng vậy.
Điều này rất có thể xảy ra.
Trước khi tôi dành thời gian để định lượng chính xác mức độ xấu, tôi tự hỏi liệu có một biểu diễn dựa trên bảng tốt hơn để thao tác với các loại hoạt động tôi mô tả ở trên không.
Tôi không thuyết phục bạn cần lập chỉ mục trường mới. –
Nói chung, lệnh 'order by' yêu cầu chỉ mục, phải không? – spender
@spender Yêu cầu không, nhưng nếu các hàng trong bảng của bạn lớn và bạn nhận được một tập hợp kết quả lớn, sắp xếp bằng cách sử dụng một chỉ mục có thể tạo ra khá ít I/O. –