91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

mysql索引過長以及專用密匙太長的解決方法

發布時間:2021-11-08 12:48:19 來源:億速云 閱讀:353 作者:柒染 欄目:開發技術

今天就跟大家聊聊有關mysql索引過長以及專用密匙太長的解決方法,可能很多人都不太了解,為了讓大家更加了解,小編給大家總結了以下內容,希望大家根據這篇文章可以有所收獲。

在創建要給表的時候遇到一個有意思的問題,提示Specified key was too long; max key length is 767 bytes,從描述上來看,是Key太長,超過了指定的 767字節限制

下面是產生問題的表結構

CREATE TABLE `test_table` (
  `id` int(11) unsigned NOT NULL AUTO_INCREMENT,
  `name` varchar(1000) NOT NULL DEFAULT '',
  `link` varchar(1000) NOT NULL DEFAULT '',
  PRIMARY KEY (`id`),
  KEY `name` (`name`)
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8mb4;

我們可以看到,對于name,我們設置長度為1000可變字符,因為采用utf8mb4編碼, 所以它的大小就變成了 1000 * 4 > 767
所以再不修改其他配置的前提下,varchar的長度大小應該是 767 / 4 = 191

有興趣的同學可以測試下,分別指定name大小為191, 192時,是不是前面的可以創建表成功,后面的創建表失敗,并提示錯誤Specified key was too long; max key length is 767 bytes

解決辦法一

  • 使用innodb引擎

  • 啟用innodb_large_prefix選項,修改約束擴展至3072字節

  • 重新創建數據庫

my.cnf配置

set global innodb_large_prefix=on;
set global innodb_file_per_table=on;
set global innodb_file_format=BARRACUDA;
set global innodb_file_format_max=BARRACUDA;

上面這個3072字節的得出原因如下

我們知道InnoDB一個page的默認大小是16k。由于是Btree組織,要求葉子節點上一個page至少要包含兩條記錄(否則就退化鏈表了)。
所以一個記錄最多不能超過8k。又由于InnoDB的聚簇索引結構,一個二級索引要包含主鍵索引,因此每個單個索引不能超過4k (極端情況,pk和某個二級索引都達到這個限制)。
由于需要預留和輔助空間,扣掉后不能超過3500,取個“整數”就是(1024*3)。

解決辦法二

在創建表的時候,加上 row_format=DYNAMIC

CREATE TABLE `test_table` (
  `id` int(11) unsigned NOT NULL AUTO_INCREMENT,
  `name` varchar(255) NOT NULL DEFAULT '',
  `link` varchar(255) NOT NULL DEFAULT '',
  PRIMARY KEY (`id`),
  KEY `name` (`name`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 row_format=DYNAMIC;

這個參數的作用如下

MySQL 索引只支持767個字節,utf8mb4 每個字符占用4個字節,所以索引最大長度只能為191個字符,即varchar(191),若想要使用更大的字段,mysql需要設置成支持數據壓縮,并且修改表屬性 row_format ={DYNAMIC|COMPRESSED}

看完上述內容,你們對mysql索引過長以及專用密匙太長的解決方法有進一步的了解嗎?如果還想了解更多知識或者相關內容,請關注億速云行業資訊頻道,感謝大家的支持。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

京山县| 托里县| 旌德县| 二手房| 黄浦区| 太仆寺旗| 故城县| 华阴市| 马山县| 安远县| 手游| 崇阳县| 赤峰市| 万盛区| 西城区| 同江市| 岑溪市| 独山县| 延安市| 关岭| 建昌县| 金坛市| 平阴县| 凌云县| 宜宾市| 蒙自县| 景泰县| 博野县| 隆尧县| 甘肃省| 广汉市| 通州市| 辽阳市| 阜康市| 乐陵市| 互助| 靖宇县| 绿春县| 凤阳县| 中宁县| 金山区|