我想在db中做一些索引优化。
我看到在varchar 32上有一个索引,在varchar 100上有一个索引。
例如,varchar 32包含一个id (可能是用户id或其他什么,比如这个字符串60c487df-38e8-1c79-da00-561799874092),varchar 100包含短字符串,例如pluto或pippo。(我知道,这个领域必须缩小规模)
(第一个问题)对于这些字段,删除索引并创建部分索引是正确的吗?
例如,将varchar 32上的索引大小缩小到前8个字符,帮助mysql更快地找到行?(分析一个较小的指数)。有缺点吗?
第二个问题)字段x varchar 100有一个完整的索引(而不是部分索引),当我添加带有x="pippo“的行时,mysql是如何工作的?Mysql会为该列的索引填充(或保留)所有100个字节吗?
提前谢谢。
发布于 2017-03-01 12:14:32
我怀疑是否有任何理由进一步“优化”您的索引。缩小索引中字段的大小确实会减少索引的大小。但是,除非您处于内存受限的环境中,否则它们只会增加不必要的复杂性。
部分索引将不允许MySQL“更快地找到一行”。仅比较前8个字节并不足以找到一行,因此MySQL必须做更多的工作才能找到给定的行。
varchar()
数据类型是可变长度字符字段。这意味着它只存储字符串中的数据,加上一个或两个字节的长度。无论这些值是在表中还是在索引中,都是如此。
您应该保留现有的索引,并寻找优化系统的其他方法--如果性能有问题的话。
发布于 2017-03-02 00:32:13
https://stackoverflow.com/questions/42531361
复制相似问题