我有相当大的MySQL表(超过1000万行,innoDB引擎),表中有一个字段指示行的类别(varchar(40)),类别小于10。
现在我有两个选择:
hash index。category表,并将它们与category_id链接哪种操作有更好的性能,为什么使用这两种操作:
hash index相比?)hash index应该更快,但不确定,因为有人告诉我MySQL阿片刺激器将使表与小表的连接速度快得多)编辑:我几乎从来没有在这里添加新的类别。
发布于 2016-11-30 07:07:09
您可以在分类列上定义索引,它将使某些特定类别的查询速度快得多(假设您搜索的类别不发生在大多数行中)。这样,varchar上的索引就能很好地工作。
可能为类别名称创建查找表的原因是,如果要更改类别名称,可以更改类别查找表中的一行,而不是主表中潜在的数千行。
顺便说一下,您使用的短语“散列索引”是错误的。InnoDB不支持散列索引,只支持B树索引和全文索引.
发布于 2016-11-30 07:21:57
考虑到对于任何DB,检查数字(整数)比字符串更快。我相信,如果像前面提到的那样创建X-REF表,将字符串转换为大表记录的ID,并将此字段设置为索引,则会收到最快的结果。
如前所述,您将通过帮助DB比较10M数字而不是10M字符串来获得性能。
此外,正如Bill建议的那样,这将允许您以最灵活的方式更改/添加类别。
最后,如果您不期望类别总数在2000年以上增长,甚至可以使大表的索引字段仅为两个字节的整数。
https://stackoverflow.com/questions/40882119
复制相似问题