Heim  >  Artikel  >  Datenbank  >  Warum wird mein MySQL VARCHAR(512)-Index nicht verwendet?

Warum wird mein MySQL VARCHAR(512)-Index nicht verwendet?

Susan Sarandon
Susan SarandonOriginal
2024-11-25 03:56:12374Durchsuche

Why Isn't My MySQL VARCHAR(512) Index Being Used?

MySQL VARCHAR-Indexlänge

MySQL-Tabellen haben eine maximale Indexlänge von 767 Bytes. Dies gilt pro Spalte, daher darf ein zusammengesetzter Index insgesamt 767 Byte nicht überschreiten. Es gibt jedoch einige Ausnahmen von dieser Regel:

  • Wenn die Konfigurationsoption innodb_large_prefix aktiviert ist, wird die Indexlängenbeschränkung für InnoDB-Tabellen mit den Zeilenformaten DYNAMIC oder COMPRESSED auf 3072 Bytes erhöht.
  • Für utf8-Zeichensätze geht MySQL von 3 Bytes pro Zeichen aus. Daher beträgt die maximale Anzahl der Zeichen, die indiziert werden können, 255 (767 / 3).

In Ihrem speziellen Fall:

  • Ihre Produkte Die Tabelle hat eine Namensspalte vom Typ varchar(512).
  • Sie haben mit ALTER TABLE products ADD einen Index für diese Spalte erstellt INDEX (Name(512)).

Der von Ihnen erstellte Index wird nicht verwendet, da er die maximale Indexlänge von 767 Bytes überschreitet. Dies liegt daran, dass MySQL 3 Bytes pro UTF-8-Zeichen und 512 Zeichen * 3 Bytes/Zeichen = 1536 Bytes annimmt.

Um dieses Problem zu beheben, können Sie:

  • Reduzieren Sie die Länge des Index auf 255 Zeichen oder weniger.

    ALTER TABLE products ADD INDEX (name(255));
  • Aktivieren Sie die Konfigurationsoption innodb_large_prefix und verwenden Sie das Zeilenformat DYNAMISCH oder KOMPRIMIERT.

    SET innodb_large_prefix = ON;
    
    ALTER TABLE products ROW_FORMAT=COMPRESSED;

Zusätzlich Hinweise:

  • Wenn Sie hauptsächlich lagern ASCII-Zeichen (1 Byte pro Zeichen), Sie können einen Index von bis zu 767 Bytes angeben.
  • Es ist möglich, 4-Byte-Zeichen mit dem Zeichensatz utf8mb4 zu speichern. Dadurch wird jedoch die maximale Anzahl der Zeichen, die indiziert werden können, weiter reduziert.

Das obige ist der detaillierte Inhalt vonWarum wird mein MySQL VARCHAR(512)-Index nicht verwendet?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn