為什麼我的 MySQL VARCHAR(512) 索引沒有被使用?

Susan Sarandon
發布: 2024-11-25 03:56:12
原創
373 人瀏覽過

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

MySQL VARCHAR 索引長度

MySQL 表的最大索引長度為 767 位元組。這是每列的,因此複合索引總共不能超過 767 位元組。但是,此規則有一些例外:

  • 啟用 innodb_large_prefix 配置選項後,使用 DYNAMIC 或 COMPRESSED 行格式的 InnoDB 表的索引長度限制將提高到 3072 位元組。
  • 對於utf8字元集,MySQL假設每個字元3個位元組。因此,可以索引的最大字元數為 255 (767 / 3)。

在您的具體情況下:

  • 您的產品表有一個類型為 varchar(512) 的名稱列。
  • 您在此列上建立了索引ALTER TABLE products ADD INDEX (name(512))。

您建立的索引未被使用,因為它超過了最大索引長度 767 位元組。這是因為 MySQL 假定每個 UTF-8 字元佔 3 個字節,即 512 個字元 * 3 個位元組/字元 = 1536 個位元組。

要解決此問題,您可以:

  • 將索引的長度減少到255 個字元或

    ALTER TABLE products ADD INDEX (name(255));
    登入後複製
  • 啟用innodb_large_prefix 設定選項並使用DYNAMIC 或 COMPRESSED 行格式。

    SET innodb_large_prefix = ON;
    
    ALTER TABLE products ROW_FORMAT=COMPRESSED;
    登入後複製

其他注意:

  • 如果您主要儲存ASCII 字元(每個字元1 個位元組),則可以指定最多767 個位元組的索引。
  • 可以儲存使用 utf8mb4 字元集的 4 位元組字元。但是,這將進一步減少可索引的最大字元數。

以上是為什麼我的 MySQL VARCHAR(512) 索引沒有被使用?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板