mysql - 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 直到需要更好的性能)。
我真的很好奇这里的区别。
解决方案
要查看生成的内容,请使用命令行工具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
推荐阅读
- angular - Angular 7 中的动态和多 ngTemplate
- opengl - 如何在opengl的一个vbo中绘制多个元素?
- java - 运行maven spi项目进行调试
- python - 带有索引数组的 Numpy 切片
- node.js - 如何在不使用 pipe() 强制下载的情况下向客户端呈现和显示 pdf
- python - 如何在 Windows 中设置默认 Python
- javascript - 从我的excel文件确认或取消数据上传后
- oracle - Oracle 包替换卡住了
- php - 如果我的 JQuery 表单填充控件为假,如何避免 PHP 重定向到“操作”网址?
- excel - 如何计算从表 1 到另一表 2 的不同特定单元格中出现的次数?