首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >MySQL:哈希索引与表连接

MySQL:哈希索引与表连接
EN

Stack Overflow用户
提问于 2016-11-30 06:57:50
回答 2查看 422关注 0票数 0

我有相当大的MySQL表(超过1000万行,innoDB引擎),表中有一个字段指示行的类别(varchar(40)),类别小于10。

现在我有两个选择:

  1. 保留该字段并在其上创建一个hash index
  2. 将字段设置为另一个category表,并将它们与category_id链接

哪种操作有更好的性能,为什么使用这两种操作:

  1. 所有类别的查询(我知道分开的表可能更快,但它真的更快吗?)甚至与hash index相比?)
  2. 查询指定类别中的所有行(我假设hash index应该更快,但不确定,因为有人告诉我MySQL阿片刺激器将使表与小表的连接速度快得多)

编辑:我几乎从来没有在这里添加新的类别。

EN

回答 2

Stack Overflow用户

发布于 2016-11-30 07:07:09

您可以在分类列上定义索引,它将使某些特定类别的查询速度快得多(假设您搜索的类别不发生在大多数行中)。这样,varchar上的索引就能很好地工作。

可能为类别名称创建查找表的原因是,如果要更改类别名称,可以更改类别查找表中的一行,而不是主表中潜在的数千行。

顺便说一下,您使用的短语“散列索引”是错误的。InnoDB不支持散列索引,只支持B树索引和全文索引.

票数 3
EN

Stack Overflow用户

发布于 2016-11-30 07:21:57

考虑到对于任何DB,检查数字(整数)比字符串更快。我相信,如果像前面提到的那样创建X-REF表,将字符串转换为大表记录的ID,并将此字段设置为索引,则会收到最快的结果。

如前所述,您将通过帮助DB比较10M数字而不是10M字符串来获得性能。

此外,正如Bill建议的那样,这将允许您以最灵活的方式更改/添加类别。

最后,如果您不期望类别总数在2000年以上增长,甚至可以使大表的索引字段仅为两个字节的整数。

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

https://stackoverflow.com/questions/40882119

复制
相关文章

相似问题

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