sql >> Database teknologi >  >> RDS >> Mysql

MySQL:effektiv forespørgsel på en kolonne, der er for lang til at blive indekseret

Det virkelige problem er sandsynligvis at bruge VARCHAR for fingeraftrykskolonnen. Når du bruger utf8-tegnkodningen, håndhæver MySQL "worst case scenario" og tæller 3 bytes pr. tegn.

Skift det enten til 1-byte-kodning (f.eks. Latin1), eller brug VARBINARY skriv i stedet:

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

Hvis du skal gå ud over grænsen på 767 byte pr. præfiks, skal du eksplicit angiv, at når du opretter indekset:

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. Hurtig måde at opdage rækkeantallet af en tabel i PostgreSQL

  2. Definer tabel- og kolonnenavne som argumenter i en plpgsql-funktion?

  3. Live søgning ved hjælp af Codeigniter Mysql

  4. Opdater rækker efter mysql select foreach