我有相当大的MySQL表(超过1000万行,innoDB引擎),该表有一个字段,表示行的类别(varchar(40)
),类别小于10。
现在我有两个选择:
hash index
。category
表格,并将其与category_id
哪一个具有更好的性能以及为什么使用这两个操作:
hash index
相比?)hash index
应该更快,但不确定,因为有人告诉我MySQL opitimizer会使表加入小表更快)答案 0 :(得分:3)
您可以在类别列上定义索引,它会更快地对特定类别进行一些查询(假设您搜索的类别不会出现在大多数行中)。 varchar上的索引以这种方式运行良好。
您可以为类别名称创建查找表的原因是,如果要更改类别名称,可以通过更改类别查找表中的一行来实现,而不是在主要数据库中更改数千行表
顺便说一句,你使用短语“hash index”是错误的。 InnoDB不支持哈希索引,只支持B树索引和全文索引。
答案 1 :(得分:0)
考虑到对于任何数据库,检查数字(整数)比检查字符串更快。我相信如果您创建一个X-REF表,如果您将字符串转换为大表记录的ID,并将此字段设置为索引,则会收到最快的结果。
如上所述,您将通过协助您的数据库比较10M数字而不是10M字符串来获得性能。
另外,正如Bill Karwin建议的那样,这将允许您以最灵活的方式更改/添加类别。
最后,如果你不希望类别的总数增加到2000以上,你甚至可以使大表的索引字段只是一个两字节的整数。