首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Mysql: varchar的部分索引

Mysql: varchar的部分索引
EN

Stack Overflow用户
提问于 2017-03-01 12:09:47
回答 2查看 891关注 0票数 2

我想在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个字节吗?

提前谢谢。

EN

回答 2

Stack Overflow用户

发布于 2017-03-01 12:14:32

我怀疑是否有任何理由进一步“优化”您的索引。缩小索引中字段的大小确实会减少索引的大小。但是,除非您处于内存受限的环境中,否则它们只会增加不必要的复杂性。

部分索引将不允许MySQL“更快地找到一行”。仅比较前8个字节并不足以找到一行,因此MySQL必须做更多的工作才能找到给定的行。

varchar()数据类型是可变长度字符字段。这意味着它只存储字符串中的数据,加上一个或两个字节的长度。无论这些值是在表中还是在索引中,都是如此。

您应该保留现有的索引,并寻找优化系统的其他方法--如果性能有问题的话。

票数 1
EN

Stack Overflow用户

发布于 2017-03-02 00:32:13

  • 前缀索引只有在索引较小的情况下才会有所帮助。但你失去了独特性,如果这重要的话。通常前缀索引是无用的;小心。
  • UUID的固定长度为36个字符,不是32个,也不是100个。
  • 由于您有类型1的UUID,您可以重新排列这些位以使它们按时间顺序排列,从而可能提供更好的“引用局部性”。见下面的链接。
  • 将36个字符打包为16个字节将节省大量空间。这将导致更好的缓存性(特别是对于大型表),从而提高速度。见链接。

https://mariadb.com/kb/en/guiduuid-performance/

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/42531361

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档