Mysql
 sql >> база данни >  >> RDS >> Mysql

MySQL:ефективна заявка към колона, твърде дълга, за да бъде индексирана

Истинският проблем вероятно е да използвате VARCHAR за колоната за пръстови отпечатъци. Когато използва кодирането на символи utf8, MySQL налага "най-лошия сценарий" и отчита 3 байта на знак.

Или променете това на 1-байтово кодиране (да речем Latin1), или използвайте VARBINARY вместо това въведете:

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

Ако трябва да надхвърлите ограничението от 767 байта на префикс, ще трябва изрично посочете, че когато създавате индекса:

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. SUM двойка COUNT от две таблици въз основа на времева променлива

  2. Как да свържете W10 Universal App с MySQL база данни

  3. Rails 3 SQL заявка за избор със съединявания

  4. Постоянен срещу непостоянен - ​​Кое да използвам?

  5. Коригиране на 1064 SQL грешка при импортиране на база данни в Wampserver