Mysql
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Mysql

MySQL:truy vấn hiệu quả trên một cột quá dài để được lập chỉ mục

Vấn đề thực sự có lẽ là sử dụng VARCHAR cho cột dấu vân tay. Khi sử dụng mã hóa ký tự utf8, MySQL thực thi "trường hợp xấu nhất" và đếm 3 byte cho mỗi ký tự.

Thay đổi mã đó thành mã hóa 1 byte (ví dụ như Latin1) hoặc sử dụng VARBINARY thay vào đó gõ:

create table fingerprinted_entry 
( type varchar (128) not null, 
  fingerprint varbinary (512) not null,
  PRIMARY KEY(type, fingerprint)) ENGINE InnoDB; -- no error here

Nếu bạn phải vượt quá giới hạn 767 byte cho mỗi tiền tố, bạn sẽ phải rõ ràng nói rằng khi bạn tạo chỉ mục:

create table fingerprinted_entry 
( type varchar (128) not null, 
  fingerprint varbinary (2048) not null,              -- 2048 bytes
  PRIMARY KEY(type, fingerprint(767))) ENGINE InnoDB; -- only the first 767 bytes of fingerprint are stored in the index


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Canonical Function EntityFunctions.TruncateTime không tồn tại trong MYSQL

  2. chọn nhiều hàng trong một hàng kết quả

  3. Chuyển hướng - thay thế cho <meta http-equiv ='refresh' />?

  4. Làm cách nào để nhận bản ghi mới nhất trong mỗi nhóm bằng cách sử dụng GROUP BY?

  5. Cách hàm OCTET_LENGTH () hoạt động trong MySQL