我刚开始研究MySQL数据库的优化问题。从我正在阅读的内容来看,索引似乎是一个好主意 - 所以我想在VARCHAR
列的一个列上使用MyISAM
引擎创建一个索引。
从我正在阅读的内容中,我了解索引的大小限制为1,000字节。但是,VARCHAR
字符大小为3个字节。这是否意味着如果我想用50行索引VARCHAR
列,我需要一个6个字符的索引前缀? (每个字符1,000字节/ 50行/ 3字节= 6.66)
如果是这样,那似乎有点复杂 - 这就是为什么我质疑我的理解。您只能使用1个字符的前缀在VARCHAR
列中索引333行,这似乎很奇怪。
我错过了什么吗?
答案 0 :(得分:4)
根据我的阅读,我理解索引的大小限制为1000字节。
索引密钥长度仅限1000
MyISAM
字节,767
InnoDB
字节(每列)。
这意味着您无法在UTF8
表中对单个333
列的索引超过MyISAM
个字符长(在计算最大索引大小时,MySQL
会假设{{每个字符1}}个字节,但实际长度可能要小得多)
您可以根据需要创建任意数量的索引记录。
答案 1 :(得分:0)
我认为它意味着varchar的宽度。如果索引最大大小为1000字节且varchar长度为3个字节,那么最大可索引大小将为1000/3。