成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

遇到個(gè)MySQL索引長(zhǎng)度限制的問(wèn)題

數(shù)據(jù)庫(kù) MySQL
了解完存儲(chǔ)引擎和不同MySQL版本對(duì)索引長(zhǎng)度的限制,我們以InnoDB引擎為例,看MySQL不同的字符集對(duì)索引長(zhǎng)度有啥影響。

前言

我只是創(chuàng)建個(gè)索引而已,沒(méi)想到還這些遇到個(gè)詭異的問(wèn)題!

話說(shuō)你平時(shí)創(chuàng)建mysql時(shí)遇到過(guò)以下創(chuàng)建索引報(bào)錯(cuò)的情況嗎?

報(bào)錯(cuò)提示如下

Specified key was too long; max key length is 767 bytes
//需要添加索引的字段的長(zhǎng)度太長(zhǎng),超過(guò)了767字節(jié)

??什么?索引長(zhǎng)度限制?我從沒(méi)遇到過(guò)啊,MySQL還會(huì)對(duì)索引鍵的長(zhǎng)度有限制?

是的,一般都不會(huì)遇到,不過(guò)這個(gè)問(wèn)題我一個(gè)同事就遇到了!

他用同樣表結(jié)構(gòu)和加索引的語(yǔ)法,都是相同的,但是一個(gè)測(cè)試環(huán)境和一個(gè)線上MySQL版本,一個(gè)執(zhí)行成功一個(gè)執(zhí)行失敗!

事故現(xiàn)場(chǎng):

同事A的迭代開(kāi)發(fā)測(cè)試完了,準(zhǔn)備將環(huán)境放到預(yù)發(fā)布了,在添加索引的時(shí)候居然創(chuàng)建索引報(bào)錯(cuò)了,瞬間一臉郁悶,我測(cè)試過(guò)得了啊!

是的,沒(méi)錯(cuò),雖然測(cè)過(guò)了,但是因?yàn)榘姹静煌跒閿?shù)據(jù)庫(kù)字段類型(varchar(255))創(chuàng)建索引的時(shí)候,指定的字段有可能會(huì)超過(guò)了存儲(chǔ)引擎默認(rèn)的長(zhǎng)度!

當(dāng)然你會(huì)問(wèn),為啥要為varchar(255)創(chuàng)建索引啊,這個(gè)就不多追問(wèn)了!

不過(guò)剛好趁對(duì)這個(gè)問(wèn)題有印象,今天可以聊聊MySQL單表對(duì)索引限制的知識(shí)點(diǎn)!

不同存儲(chǔ)引擎索引長(zhǎng)度

既然MySQL 對(duì)每個(gè)單表中所創(chuàng)建的索引長(zhǎng)度是有限制,我們先看下不同的存儲(chǔ)引擎下對(duì)表的限制是什么樣的。

圖片圖片

MyISAM

? 單列索引:最大長(zhǎng)度不能超過(guò) 1000 bytes,否則會(huì)報(bào)警,但是創(chuàng)建成功,最終創(chuàng)建的是前綴索引(取前333個(gè)字符)。

? 聯(lián)合索引:索引長(zhǎng)度和不能超過(guò) 1000 bytes,否則會(huì)報(bào)錯(cuò),創(chuàng)建失敗

InnoDB

? 單列索引:超過(guò) 767 bytes的,給出warning,最終索引創(chuàng)建成功,取前綴索引(取前 255 字符)

? 聯(lián)合索引:各列長(zhǎng)度不超過(guò) 767 字節(jié) ,如果有超過(guò) 767 bytes 的,則給出報(bào)警,索引最后創(chuàng)建成功,但是對(duì)于超過(guò) 767 字節(jié)的列取前綴索引,與索引列順序無(wú)關(guān),總和不得超過(guò) 3072 ,否則失敗,無(wú)法創(chuàng)建

默認(rèn)情況下utf編碼一個(gè)字符占三個(gè)字節(jié),也就是說(shuō)在InnoDB引擎中,4個(gè)varchar(255)字段就把單表索引長(zhǎng)度給占滿了哦!

3072 / 767 約等于 4, 而varchar(255),在utf8編碼下是765字節(jié),因此四個(gè)varchar(255)字段就快超過(guò)綜合3072了

MySQL版本對(duì)索引長(zhǎng)度限制

圖片圖片

MySQL5.5 版本:引入了 innodb_large_prefix,用來(lái)禁用大型前綴索引,以便與不支持大索引鍵前綴的早期版本的 InnoDB 兼容

開(kāi)啟 innodb_large_prefix 可以使單索引的長(zhǎng)度限制達(dá)到 3072 字節(jié)(但是聯(lián)合索引總長(zhǎng)度限制還是 3072 字節(jié)),禁用時(shí)單索引的長(zhǎng)度限制為 767 字節(jié)
MySQL5.7: MySQL5.5版本與MySQL5.6 版本,innodb_large_prefix 是默認(rèn)關(guān)閉的,在 MySQL5.7 及以上版本則默認(rèn)開(kāi)啟
MySQL8.0 版本:innodb_large_prefix 已被移除,從版本 8.0 開(kāi)始,索引長(zhǎng)度限制由行格式?jīng)Q定

 若行格式為 DYNAMIC 或 COMPRESSED 時(shí),限制值為 3072,而行格式 REDUNDANT 或 COMPACT 時(shí),限制值為 767。

MySQL在5.7及以上版本在InnoDB引擎中默認(rèn)行格式是 DYNAMIC,所以限制長(zhǎng)度為3072字節(jié)。

字符集對(duì)索引長(zhǎng)度影響

了解完存儲(chǔ)引擎和不同MySQL版本對(duì)索引長(zhǎng)度的限制,我們以InnoDB引擎為例,看MySQL不同的字符集對(duì)索引長(zhǎng)度有啥影響。

未開(kāi)啟 innodb_large_prefix

圖片圖片

未開(kāi)啟 innodb_large_prefix

MySQL5.7默認(rèn)開(kāi)啟了innodb_large_prefix,或者更高版本,比如MySQL8

圖片圖片

UTF8編碼占用3個(gè)字節(jié),能表示除了表情符之外的其他字符,UFT8mb4占用4個(gè)字節(jié),既能表示漢字也能表示表情符。

解決方案

針對(duì)這個(gè)問(wèn)題,一般來(lái)說(shuō)可以考慮一下幾種方式去處理

? 將varchar(255)字段改成更小的字符長(zhǎng)度類型

? 如果是MySQL5.5版本與MySQL5.6 版本,可以啟用innodb_large_prefix參數(shù),來(lái)使得單個(gè)索引字段的長(zhǎng)度突破767

? 這種大字段類型可以考慮前綴索引

畢竟varchar(255)這種長(zhǎng)度的類型作為索引相對(duì)來(lái)說(shuō)并不是那么合適!

責(zé)任編輯:武曉燕 來(lái)源: 小許code
相關(guān)推薦

2022-11-10 08:40:56

OracleMySQL

2010-05-28 11:14:39

MySQL全文索引限制

2010-05-31 13:38:17

2010-06-07 14:44:24

MySQL導(dǎo)入

2016-12-20 12:42:28

MySQL腳本問(wèn)題

2022-08-12 18:40:00

分布式

2025-04-09 09:20:00

2010-10-18 09:30:55

2010-05-12 11:14:25

MySQL SQL優(yōu)化

2010-10-08 14:45:43

mysql中int

2010-07-13 10:56:43

Perl print

2012-11-28 10:21:38

網(wǎng)管

2021-10-12 00:04:24

腳本備份MariDB

2012-05-17 15:15:11

Linux

2010-05-11 18:05:50

MySQL 5安裝

2010-05-20 15:00:00

2019-07-24 08:47:45

MySQL 數(shù)據(jù)庫(kù)收藏

2010-11-22 11:55:23

MySQL字段

2021-04-22 07:47:47

面試內(nèi)存磁盤

2010-10-12 15:04:52

MySql索引
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)

主站蜘蛛池模板: 自拍偷拍一区二区三区 | 岛国在线免费观看 | 久久精彩视频 | 在线一区视频 | 人人人人爽 | 精精精精xxxx免费视频 | 国产精品日日做人人爱 | 欧美激情精品久久久久久免费 | 亚洲成色777777在线观看影院 | 日韩成人av在线 | 综合久久亚洲 | 看a网站 | 一区二区三区高清在线观看 | 欧美日韩成人在线观看 | 五月婷亚洲 | 日韩精品区 | 91丨国产| 成人av免费在线观看 | 伊人亚洲 | 久久丝袜视频 | 亚洲一区二区三 | 国产精品久久精品 | 福利片在线观看 | 天天干天天爽 | 99热精品国产 | 亚洲成a人片 | 日韩一区二区三区四区五区 | 国产精品电影在线观看 | 一级做a爰片久久毛片 | 91精品国产日韩91久久久久久 | 色网站入口 | 国产精品国色综合久久 | 日韩av免费在线电影 | 中文字幕一区在线观看视频 | 成人毛片网| 在线观看毛片网站 | 国产成人jvid在线播放 | 日韩视频一区二区 | 欧美日韩在线一区二区 | 欧美激情一区二区三级高清视频 | 日韩av一二三区 |