我想在db中进行一些索引优化。
我看到字段varchar 32上有一个索引,这是varchar 100字段的索引。
例如,varchar 32包含一个id(可能是用户ID或其他内容,如此字符串60c487df-38e8-1c79-da00-561799874092),varchar 100包含短字符串,如pluto或pippo。 (我知道,这个领域必须缩小)
第一个问题)对于这些字段,删除索引并创建部分索引是否正确?
例如,将varchar 32上的索引大小减小到前8个char,帮助mysql找到更快的行? (分析较小的指数)。 有缺点吗?
第二个问题)字段x varchar 100有一个完整的索引(不是部分),当我添加一个x =“pippo”的行时mysql如何工作? Mysql会填充(或保留)该列索引的所有100个字节吗?
提前致谢。
答案 0 :(得分:2)
我怀疑是否有任何理由进一步“优化”您的索引。减小索引中字段的大小会减小索引的大小。但是,除非您处于内存受限的环境中,否则它们只会增加不必要的复杂性。
部分索引不允许MySQL“更快地找到行”。只比较前8个字节不足以找到一行,因此MySQL必须做更多工作才能找到给定的行。
varchar()
数据类型是不同的长度字符字段。这意味着它只存储字符串中的数据,加上第一个字节或第一个字节的长度。无论值是在表中还是在索引中,都是如此。
如果性能有问题,您应该保留所拥有的索引并寻找其他方法来优化您的系统。
答案 1 :(得分:1)