Mysql
 sql >> Baza danych >  >> RDS >> Mysql

MySQL:wydajne zapytanie w kolumnie zbyt długiej do indeksowania

Prawdziwym problemem jest prawdopodobnie użycie VARCHAR dla kolumny odcisków palców. Używając kodowania znaków utf8, MySQL wymusza „najgorszy scenariusz” i liczy 3 bajty na znak.

Zmień to na kodowanie 1-bajtowe (powiedzmy Latin1) lub użyj VARBINARY zamiast tego wpisz:

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

Jeśli musisz przekroczyć limit 767 bajtów na prefiks, będziesz musiał wyraźnie powiedz, że podczas tworzenia indeksu:

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. Jak przekonwertować cały zestaw znaków bazy danych MySQL i sortowanie do UTF-8?

  2. Błąd bazy danych MySQL:Wyrażenia stałe, losowe lub zależne od strefy czasowej w funkcji (pod)partycjonowania są niedozwolone

  3. MySQL, jak sprawić, by wartość wygasła?

  4. Dodaj List<int> do parametru mysql

  5. Drukuj dane tabeli mysql php