Đây có thể là một tình huống phổ biến, nhưng tôi không thể tìm thấy câu trả lời cụ thể trên SO hoặc Google.Duy trì một bảng lớn các giá trị duy nhất trong MySQL
Tôi có một bảng lớn (> 10 triệu hàng) mối quan hệ bạn bè trên cơ sở dữ liệu MySQL rất quan trọng và cần được duy trì sao cho không có hàng trùng lặp. Bảng lưu trữ các uids của người dùng. SQL cho bảng là:
CREATE TABLE possiblefriends(
id INT NOT NULL AUTO_INCREMENT,
PRIMARY KEY(id),
user INT,
possiblefriend INT)
Cách bàn hoạt động là mỗi người dùng có khoảng 1000 hoặc lâu hơn "có thể bạn bè" được phát hiện và cần phải được lưu trữ, nhưng lặp lại "bạn bè tốt" cần phải được tránh.
Vấn đề là do thiết kế chương trình, trong suốt một ngày, tôi cần thêm 1 triệu hàng hoặc nhiều hơn vào bảng có thể hoặc không trùng lặp mục nhập hàng. Câu trả lời đơn giản có vẻ là kiểm tra mỗi hàng để xem nó có phải là một bản sao không, và nếu không, sau đó chèn nó vào bảng. Nhưng kỹ thuật này có thể sẽ rất chậm khi kích thước bảng tăng lên 100 triệu hàng, 1 tỷ hàng hoặc cao hơn (mà tôi mong đợi nó sẽ sớm).
Cách tốt nhất (tức là nhanh nhất) để duy trì bảng duy nhất này là gì?
Tôi không cần phải có bảng chỉ có giá trị duy nhất luôn sẵn có. Tôi chỉ cần nó một lần một ngày cho công việc hàng loạt. Trong trường hợp này, tôi có nên tạo một bảng riêng mà chỉ chèn tất cả các hàng có thể (chứa các hàng trùng lặp và tất cả), và sau đó vào cuối ngày, tạo bảng thứ hai tính tất cả các hàng duy nhất trong bảng đầu tiên?
Nếu không, cách tốt nhất cho bảng này là gì?
(Nếu chỉ là giải pháp lâu dài tốt nhất, xin vui lòng cho tôi biết là chỉ số để sử dụng)
câu hỏi, do u cần truy vấn tới bảng 'possiblefriends'? tôi chỉ nghĩ rằng u có thể chia bảng theo người dùng, nó sẽ có lợi khi truy vấn u, tuy nhiên nó có thể biến thành một thảm họa bảo trì trong dài hạn – ajreal
@ajreal: bạn có nghĩa là mỗi người dùng có bảng riêng của mình? sẽ có gần một triệu người dùng, vì vậy điều đó có thể làm mọi thứ trở nên phức tạp. – eric
có, đó là y tôi đã đề cập nó có thể biến thành một thảm họa bảo trì, làm thế nào về sử dụng 1k người dùng cho mỗi bảng hay như vậy? tưởng tượng u đặt tất cả các dữ liệu vào một bảng, và xảy ra bảng bị rơi và không thể phục hồi, hoặc thậm chí là phục hồi, bao lâu u có thể chịu với thời gian xuống? – ajreal