Tôi có một bảng với 1,4 tỷ hồ sơ. Cấu trúc bảng như sau:
CREATE TABLE text_page (
text VARCHAR(255),
page_id INT UNSIGNED
) ENGINE=MYISAM DEFAULT CHARSET=ascii
Yêu cầu là tạo một chỉ mục trên cột text
.
Kích thước bàn khoảng 34G.
Tôi đã cố gắng tạo chỉ mục bằng tuyên bố sau:
ALTER TABLE text_page ADD KEY ix_text (text)
Sau 10 giờ chờ đợi, cuối cùng tôi đã từ bỏ phương pháp này.
Có bất kỳ giải pháp khả thi về vấn đề này?
CẬP NHẬT : bảng không có khả năng được cập nhật hoặc chèn hoặc xóa. Lý do tại sao để tạo chỉ mục trên cột text
là vì loại truy vấn sql này sẽ được thực thi thường xuyên:
SELECT page_id FROM text_page WHERE text = ?
CẬP NHẬT : Tôi đã giải quyết vấn đề bằng cách phân vùng bảng.
Bảng được phân chia thành 40 mảnh trên cột text
. Sau đó, việc tạo chỉ mục trên bảng mất khoảng 1 giờ để hoàn thành.
Có vẻ như việc tạo chỉ mục MySQL trở nên rất chậm khi kích thước bảng trở nên rất lớn. Và phân vùng làm giảm bảng thành thân nhỏ hơn.
CREATE INDEX
câu lệnh bình thường ?