Mysql
 sql >> Teknologi Basis Data >  >> RDS >> Mysql

MySQL:kueri efisien pada kolom yang terlalu panjang untuk diindeks

Masalah sebenarnya mungkin menggunakan VARCHAR untuk kolom sidik jari. Saat menggunakan pengkodean karakter utf8, MySQL memberlakukan "skenario kasus terburuk" dan menghitung 3 byte per karakter.

Ubah itu menjadi penyandian 1-byte (katakanlah Latin1), atau gunakan VARBINARY ketik sebagai gantinya:

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

Jika Anda harus melampaui batas 767 byte per awalan, Anda harus secara eksplisit nyatakan bahwa ketika Anda membuat indeks:

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. MySql memilih nilai default jika tidak ada hasil?

  2. tabel mySQL UPDATE berdasarkan SELECT (hitungan) dari tabel yang berbeda

  3. Apa arti titik dua sebelum literal dalam pernyataan SQL?

  4. Kesalahan MySQL-Linux saat mencoba menghentikan layanannya

  5. Bagaimana cara mengatur hari pertama dalam seminggu ke Senin saat menggunakan Minggu (Tanggal) di PHP/MySQL?