Tôi có một bản đồ từ chuỗi đến số nguyên. Để lưu trữ bản đồ này trong một cơ sở dữ liệu MySQL Tôi tạo ra bảng sau:Đây có phải là cách chính xác để lập chỉ mục cột TEXT của cơ sở dữ liệu MySQL không?
CREATE TABLE map(
Argument TEXT NOT NULL,
Image INTEGER NOT NULL
)
tôi đã chọn loại TEXT cho lập luận vì chiều dài của nó là không thể đoán trước, hiện kỷ lục dài nhất có 2290 ký tự và chiều dài trung bình là 88 ký tự.
Sau khi tôi gặp các vấn đề về hiệu suất, tôi đã cố thêm chỉ mục vào cột Argument
, nhưng thấy rằng tôi phải xác định độ dài, để tránh giới hạn này, tôi đã thêm một cột số nguyên mới chứa giá trị băm (md5 hoặc khác) Giá trị cột đối số.
ALTER TABLE map ADD COLUMN ArgumentHash INTEGER;
Và kết hợp chỉ số
CREATE INDEX argument_index USING HASH ON map(ArgumentHash, Argument(80));
Kể từ thời điểm đó các vấn đề với hiệu suất đã biến mất. Tôi muốn hỏi xem đó có phải là cách chính xác để giải quyết vấn đề này hay không.
Tôi thấy rằng VARCHAR có thể là một loại cột tốt hơn để sử dụng cho các chỉ mục, vì VARCHAR, không giống TEXT, được lưu trữ nội tuyến và mang lại hiệu suất tốt hơn cho dữ liệu thường xuyên truy cập. http://stackoverflow.com/users/144287/brenton-alker –