Đây là câu hỏi ...
Xem xét 192 nghìn tỷ hồ sơ, những cân nhắc của tôi nên là gì?
Mối quan tâm chính của tôi là tốc độ.
Đây là cái bàn ...
CREATE TABLE `ref` (
`id` INTEGER(13) AUTO_INCREMENT DEFAULT NOT NULL,
`rel_id` INTEGER(13) NOT NULL,
`p1` INTEGER(13) NOT NULL,
`p2` INTEGER(13) DEFAULT NULL,
`p3` INTEGER(13) DEFAULT NULL,
`s` INTEGER(13) NOT NULL,
`p4` INTEGER(13) DEFAULT NULL,
`p5` INTEGER(13) DEFAULT NULL,
`p6` INTEGER(13) DEFAULT NULL,
PRIMARY KEY (`id`),
KEY (`s`),
KEY (`rel_id`),
KEY (`p3`),
KEY (`p4`)
);
Đây là các truy vấn ...
SELECT id, s FROM ref WHERE red_id="$rel_id" AND p3="$p3" AND p4="$p4"
SELECT rel_id, p1, p2, p3, p4, p5, p6 FROM ref WHERE id="$id"
INSERT INTO rel (rel_id, p1, p2, p3, s, p4, p5, p6)
VALUES ("$rel_id", "$p1", "$p2", "$p3", "$s", "$p4", "$p5", "$p6")
Đây là một số lưu ý ...
- Các CHỌN sẽ được thực hiện thường xuyên hơn nhiều so với CHERTN. Tuy nhiên, đôi khi tôi muốn thêm vài trăm hồ sơ cùng một lúc.
- Tải thông minh, sẽ không có gì trong nhiều giờ sau đó có thể vài nghìn truy vấn cùng một lúc.
- Đừng nghĩ rằng tôi có thể bình thường hóa nữa (cần các giá trị p trong một kết hợp)
- Các cơ sở dữ liệu nói chung là rất quan hệ.
- Đây sẽ là bảng lớn nhất cho đến nay (lớn nhất tiếp theo là khoảng 900k)
CẬP NHẬT (08/11/2010)
Thật thú vị, tôi đã được cung cấp một lựa chọn thứ hai ...
Thay vì 192 nghìn tỷ, tôi có thể lưu trữ 2,6 * 10 ^ 16 (15 số không, nghĩa là 26 triệu) ...
Nhưng trong tùy chọn thứ hai này, tôi chỉ cần lưu trữ một bigint (18) làm chỉ mục trong một bảng. Đó là nó - chỉ một cột. Vì vậy, tôi sẽ chỉ kiểm tra sự tồn tại của một giá trị. Thỉnh thoảng thêm hồ sơ, không bao giờ xóa chúng.
Vì vậy, điều đó khiến tôi nghĩ rằng phải có một giải pháp tốt hơn sau đó là mysql chỉ đơn giản là lưu trữ số ...
Đưa ra tùy chọn thứ hai này, tôi nên dùng nó hay gắn bó với ...
[sửa] Chỉ cần nhận được tin tức về một số thử nghiệm đã được thực hiện - 100 triệu hàng với thiết lập này trả về truy vấn sau 0,0004 giây [/ chỉnh sửa]