首页 > 解决方案 > 2 @Index 和 1 @Index 在休眠中的多列之间的区别?

问题描述

关于查询性能会有什么不同

@Table(name = "users", indexes = {
    @Index(columnList = "code", name = "code"),
    @Index(columnList = "current_city", name = "cbplayer_current_city_hidx")
})

对比

@Table(name = "users", indexes = {
    @Index(columnList = "code, current_city", name = "both"),
})    

这两个都只是为代码创建一个 b-tree 为当前城市创建一个 b-tree 吗?或者第二个会创建某种涉及两者的b-tree?

第一个似乎更灵活,当我的系统发展时,我可以查询代码并稍后查询 code/current_city,而无需进行 DBA 工作(KISS 直到需要更好的性能)。

我真的很好奇这里的区别。

标签: mysqlhibernatedatabase-administration

解决方案


要查看生成的内容,请使用命令行工具mysql并使用SHOW CREATE TABLE命令。

复合材料什么时候INDEX(a,bb)有用?什么时候分开INDEX(a), INDEX(bb)有用?一些例子

WHERE a = 'xyz'               -- INDEX(a) or INDEX(a,bb)
WHERE a = 'xyz' AND bb = 123  -- INDEX(a,bb) or INDEX(bb,a); others are less good
WHERE a = 'xyz' AND bb >= 123 -- INDEX(a,bb); others are less good
WHERE a >= 'xyz' AND bb = 123 -- INDEX(bb,a) is best
WHERE bb = 123                -- INDEX(bb) or INDEX(bb,a)

也就是说,最佳索引取决于重要的查询是什么。

另一方面,如果表只有一百行,如果没有任何索引,您不太可能注意到任何性能问题。

另一个讨论:http: //mysql.rjweb.org/doc.php/index_cookbook_mysql


推荐阅读