Tốt hơn là tạo một bảng cho mỗi tài khoản người dùng hoặc một bảng lớn cho tất cả dữ liệu người dùng trong MYSQL


8

Tôi đang tạo một thư mục web cho phép người dùng cá nhân đăng ký tài khoản và lưu trữ các tài liệu văn bản về cơ bản trong mục nhập cơ sở dữ liệu mysql.

Ban đầu có thể sẽ chỉ có vài trăm người dùng, nhưng chúng tôi hy vọng sẽ có 10.000 đến 100.000 tại một số điểm. Và mỗi người dùng sẽ có thể tải lên 100-200 "tài liệu".

Sẽ hiệu quả hơn khi tạo một bảng lớn, được lập chỉ mục bởi số người dùng? Về lý thuyết có thể tăng lên đến 20.000.000 mục. Hoặc để tiếp tục và tạo một bảng cho mỗi người dùng với các tài liệu cá nhân của họ?

Tôi cho rằng việc có hàng ngàn bảng trong cơ sở dữ liệu là không lành mạnh, nhưng tôi thực sự không thể tìm thấy bất kỳ dữ liệu cụ thể nào về điều này.

Câu trả lời:


7

MySQL có thể dễ dàng đối phó với các hàng 20M nếu được lập chỉ mục đúng. Chúng tôi có các bảng với hơn một tỷ hàng trong đó.

Có một bàn là sạch hơn. Không cần làm phép thuật trong ứng dụng dựa trên người dùng (tên). Dễ dàng hơn để thực hiện bất kỳ số liệu thống kê trên bảng tài liệu quá.

Tôi chắc chắn sẽ đi với một cách tiếp cận bàn lớn. Nếu bạn lo ngại về kích thước bảng (vật lý), bạn nên xem xét phân vùng bảng tài liệu. http://dev.mysql.com/doc/refman/5.5/vi/partitioning-types.html


Cảm ơn vi đa trả lơi. Sau đó tôi chắc chắn sẽ đi với một bảng duy nhất và tôi sẽ nghiên cứu phương pháp phân vùng. Một câu hỏi mặc dù, chính xác có nghĩa là gì bởi một bảng được lập chỉ mục đúng? Tôi nghe điều này được tham chiếu rất nhiều và giả sử nó có nghĩa là bảng cơ sở dữ liệu cần một khóa chỉ mục được xác định đúng. Nhưng có nhiều hơn thế để tối ưu hóa tốt nhất.
Keith

Với chỉ mục chính xác, tôi có nghĩa là có ít nhất một chỉ mục tổng hợp trên user_id với các cột bạn đang lọc hoặc sắp xếp theo bảng tài liệu và chỉ mục trên tên người dùng trên bảng người dùng (có lẽ chỉ mục một phần là đủ để kiểm tra mức độ 90-95 % Là đủ). Ví dụ: sqlfiddle.com/#!2/9fb15/2 (Trong trường hợp của tôi với chỉ số một phần 5 về số lượng người dùng là 50%)
Károly Nagy

Tôi nghĩ rằng tôi hiểu, nhờ sự giúp đỡ. Thêm một câu hỏi nữa, giả sử bạn có khóa chỉ mục chính cho mỗi bảng, liệu nó có còn giúp tối ưu hóa để xác định các cột bổ sung mà bạn biết bạn sẽ tìm kiếm thường xuyên (chẳng hạn như danh mục chính) làm chỉ mục không? Có một nhược điểm nào khi xác định khóa chính hoặc khóa duy nhất và 2-4 chỉ mục cho mỗi bảng không?
Keith

Chỉ số sẽ giúp, vâng. Trên thực tế, bạn phải luôn có các chỉ mục trên các cột bạn đang lọc nếu không truy vấn sẽ kết thúc trong tìm kiếm quét toàn bộ. Nhược điểm duy nhất (bên cạnh kích thước chỉ mục) là chèn và cập nhật chậm hơn, tuy nhiên kể từ 5.1 với plugin InnoDB và 5.5 theo mặc định, MySQL có tạo chỉ mục nhanh ( dev.mysql.com/doc/refman/5.5/en/iêu ) nên không một vấn đề lớn nữa
Károly Nagy
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.