java - 数据库索引如何工作?

标签 java database oracle

我想弄清楚数据库索引是如何工作的以及何时应该使用它。我读了一些关于这方面的文章,我发现的一篇重要文章位于 How does database indexing work?。 .

工作原理:-

优点 2:- 阅读以上链接中的讨论后,索引的一个帮助是它减少了要迭代的数据 block 的数量,如示例 1 中所述。

优势 1:- 但是我又想到了一个问题,在引入索引之后,它还必须从索引表(任何数据存储在内部生成)中搜索索引,这应该又是一次。因此,在进一步阅读之后,我发现索引通常以有效的方式存储,通常使用像 B 树这样的数据结构,它可以快速向下钻取到任何值,并且在转到节点后,它将为我们提供给定值的记录的确切内存位置在 where 或 join 条件中。正确吗?所以基本上索引 srores 是我们在其上创建索引的记录的值和实际记录的内存位置。

何时应该使用:- 因为我们知道如果我们在任何列上创建索引并且如果我们插入/更新/删除该列的任何值,则需要为该列更新索引索引表。因此在 CUD 操作期间会占用一些额外的时间和内存。所以什么时候应该使用它。想象一下,我们从用户屏幕一次创建一个客户。所以一天结束时的总客户数是 100 万。现在如果我们想搜索属于 NewYork 的客户,这里的索引会有很大帮助。同意它会稍微减慢插入客户的速度,这会有点糟糕,但我们在检索纽约客户期间获得的性能将非常好。

如果您同意/不同意上述发现,请纠正我?

最佳答案

您的一般结论非常好。

是的,对于某些查询,索引意味着需要读取的数据 block 更少。

是的,Oracle 中的默认索引类型是使用 B-Tree 在内部实现的.

是的,在带有索引的表上创建/更新/删除操作有一些开销——无论是在性能还是使用的空间方面——但这种开销通常可以忽略不计,并且当查询性能的改进是考虑过。

我衷心推荐阅读 Oracle Concepts Guide on indexes .

关于java - 数据库索引如何工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7777653/

相关文章:

java - 参数化 native 查询返回空结果集 [参数为逗号分隔字符串](使用 JPA)

oracle - 如何防止蟾蜍在一段时间后断开其 session ?

java - 我可以在另一台计算机的 Chrome 浏览器中运行我的 selenium WebDriver 代码吗?

java - 使用 select 和 update 更新 double 类型的列

java - 使用 SQLite 数据库时我的 Activity 无法打开

php - 了解数据库表的 JSON 输出

java - 使用正则表达式根据 oracle 运算符解析字符串

java: map 或 EnumMap 的 PropertyChangeSupport?

java - 沉默 Flyway——一个 log4j 问题

Mysql 跨表多个唯一键