sql >> Databáze >  >> RDS >> Mysql

MySQL:efektivní dotaz na sloupec příliš dlouhý na indexování

Skutečným problémem je pravděpodobně použití VARCHAR pro sloupec otisků prstů. Při použití kódování znaků utf8 MySQL vynucuje "nejhorší scénář" a počítá 3 bajty na znak.

Buď to změňte na 1bajtové kódování (řekněme Latin1), nebo použijte VARBINARY zadejte místo toho:

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

Pokud musíte překročit limit 767 bajtů na prefix, budete muset explicitně uveďte, že při vytváření indexu:

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. Třída nemá určenou tabulku nebo název tabulky a nedědí z existující třídy mapované na tabulku

  2. Jak nakonfigurovat databázovou poštu na serveru SQL Server

  3. Jak získat aktuální datum v PL/SQL?

  4. Vyberte sloupce v různých databázích