问题标签 [b-tree-index]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
811 浏览

php - 遍历 B-Tree 结构算法

我很难编写一个输出子节点父节点的遍历函数。

看一下示例 b-tree

btree 图

这是我正在使用的示例数据集:

我正在尝试输出一个results包含所有包含父关联的子节点数组的数组。

示例输出:

  • 节点(d)的父母是(b,f)
  • 节点(c)的父母是(d,b,f)
  • 节点(h)的父母是(i,g,f)

我不知道如何遍历直接父节点。

问:我怎样才能在最有效率的庄园里实现这个输出?

0 投票
0 回答
169 浏览

oracle - oracle 索引如何管理和维护具有动态变化数据的列的 B-Tree 索引?

我想知道 Oracle [或任何其他数据库] 如何管理和维护具有动态变化数据的列的 B-Tree 索引。

假设我有一个包含以下列的表格:

现在,如果我在 ( Status) [这没有多大意义:P] 上有索引,我想知道当索引列中的值不断变化时,Oracle 如何维护索引的 B-Tree 结构,如 Oracle docs for B-Tree indexing 中所述。

https://docs.oracle.com/cd/E11882_01/server.112/e40540/indexiot.htm#CNCPT721

例如。最初,B-Tree 索引是为给定的表快照和某些记录的状态更改值而组织的。Oracle 如何管理这些更新并为具有更新Status值的表的新快照维护 B-Tree 结构。现在,排序的记录序列将随着索引列的值的变化而变化。

在这种情况下,Oracle 将如何在内部管理和维护 B-Tree 结构?

提前致谢。

0 投票
0 回答
3696 浏览

postgresql - Postgresql BTREE 索引行大小限制

显然 Postgresq 中的 B-tree 索引存在行大小限制(以字节为单位),如果字符串太大,则会导致索引创建失败。

如何创建部分索引来克服这个丑陋的限制?通常,我有两个想法:A)将截断的字符串存储在部分索引中 B)仅存储字符串满足大小限制的那些行

您有什么建议或示例,如何创建这样的部分索引?

0 投票
1 回答
472 浏览

postgresql - postgresql 不使用索引作为主键 = 外键

我有3张主桌,

  • ts_entity(id,short_name,name,type_id)
  • ts_entry_entity(id,entity_id,entry_id)
  • ts_entry(id, ... other columns ...)

所有的 id 列都是 UUID,并且有一个 Btree 索引。

ts_entry_entity.entity_id有外键ts_entity.id,也有 Btree 索引。

ts_entry_entity.entry_id同样是外键,也有Btree索引。

我有一个 SQL,比如

奇怪的事情来了,“ ts_entry_entity.entity_id=ts_entity.id”不使用任何索引,它的成本大约为 50 秒。

表上没有 where 条件ts_entity

我的问题:为什么不ts_entry_entity.entity_id=ts_entity.id使用索引?为什么要花这么多时间?如何优化 SQL?

下面是explain analyze结果。

解释分析结果

有关表格的更多详细信息:

  • ts_entity(id,short_name,name,type_id)
  • ts_entry_entity(id,entity_id,entry_id)
  • ts_entry(id,version_id)
  • ts_entry_version(id,entry_id,submitted_date,title,submitter)
  • ts_attribute(id,attribute_definition_id,entry_id,value)
  • ts_attribute_definition(id,name)

如您所见, ts_entry_version 将保存一个条目的所有版本。ts_attribute 用于条目的可扩展列。

有关 SQL 的更多详细信息

我们在 ts_entry_version 列和 ts_attribute.value 上有几个过滤器。ts_attribute.value 是 varchar,但内容可能是时间毫秒、普通字符串值、一个或多个 id 值。SQL的结构如下:

  • select ts_entity.short_name, ts_entry_version.title, ts_attribute.value from ts_entity, ts_entry_entity,ts_entry left join ts_attribute on ts_entry.id=ts_attribute.entry_id and ts_attribute.attribute_definition_id='xxx' where ts_entity.id=ts_entry_entity.entity_id and ts_entry_entity.entry_id=ts_entry.id and ts_entry.version_id=ts_entry_version.id and ts_entry_version.title like '%xxx%' order by ts_entity.short_name asc limit 100 offset 0
0 投票
1 回答
75 浏览

sqlite - SQLite 是否支持批量加载(排序然后索引)?

从现有数据构建索引树时,有一种批量加载算法,如

  1. https://en.wikipedia.org/wiki/B%2B_tree#Bulk-loading
  2. https://www.youtube.com/watch?v=HJgXVxsO5YU

为非空表创建索引时,SQLite 是使用批量加载还是通过插入创建索引?从我的性能测试来看,SQLite 似乎使用插入来创建索引,因为索引后插入表和插入后创建索引之间的时间成本相似。

我们知道为什么不使用批量加载吗?在实践中不是很好用吗?

0 投票
1 回答
1085 浏览

sql - 多列上的PostgreSQL索引,什么时候太多了?

使用 PostgreSQL 9.6

我有一个表,其中包含一些我想过滤并按时间排序的值:

  • 时间戳(可能是在 UI 中选择的范围)
  • 状态字符串(目前只有几个已知值,也可以在 UI 中选择)
  • 上下文(UI 中数据的范围)

我想知道我是否应该:

  1. (上下文,状态)上的 btree 索引 + 时间上的单独索引
  2. 或(上下文、状态、时间)上的 btree 索引
  3. 或者每个都有一个 btree 索引?
  4. 或在(时间、状态、上下文)上的 btree 索引,用于小时间范围?

我怀疑数字 1 是最好的选择,上下文 + 状态将允许过滤掉值,然后它会扫描时间索引。我在我的数据上同时创建了 1 号并看到了一些改进,但是您如何在每种方法之间做出决定,是否有一些指导方针?

其中一个查询或多或少类似于:

另一个正在寻找时间范围。我看起来 postgres 使用多个索引,一个使用 (fk_context, severity, timestamp) 然后使用 (severity, time) 索引,但它也取决于限制。

0 投票
1 回答
653 浏览

google-cloud-firestore - Google Firebase Firestore 使用什么数据结构作为默认索引

我很好奇是否有人知道或猜到 Google 的 Firestore 用于按每个字段索引任意 NoSQL 文档的数据结构。我正在寻找构建类似的东西,使其尽可能高效。

有关其默认索引如何工作的一些信息:

它不太可能是每个字段的标准 btree 索引,因为范围搜索可以在不添加对另一个索引的要求的情况下工作。另外,如果您添加了一个新字段(使用文档存储很容易),则需要花费时间来构建包含数十亿个项目的索引和集合。

一种理论:每个文档 1 个大索引。每个文档中每个字段的索引“field_name:value”。索引映射到包含该字段/值对的排序列表文档 ID。它将能够进行相等搜索(我为每个相等要求合并排序的 doc-id),但不能进行范围搜索。基本上是倒排索引。

有什么建议可以更好地实现这样的模式吗?

0 投票
1 回答
373 浏览

mysql - B树的最小占用率是多少?

我对 B-Tree 概念相当陌生,我目前正在阅读可以在这里找到的课程的幻灯片: http ://www-db.deis.unibo.it/courses/TBD/Lezioni/02%20 -%20 指数.pdf

我读到 B 树的“最小占用率”为 50%。

这意味着什么?这是最低入住率的好百分比吗?更高/更低的最低入住率更好吗?

谢谢

0 投票
1 回答
27 浏览

database - Should I have index with all Where-clause fields?

I have a table, like this:

I have a index, like this:

I have a query, like this:

Should I create index with 3 columns? Or current index films_title_kind_idx is enough?

0 投票
1 回答
1245 浏览

mysql - MySQL - 同一列的 BTree 和哈希索引

我曾尝试找到类似的问题,但没有找到任何问题,除了关于同一列的两个索引的问题(通常)。

让我们假设我们有一个带有列的表COL。该表(和整个数据库)对于客户端是只读的(让我们假设它每隔很长一段时间更新一次/一次,并且仅由后端服务更新)。因此,插入/更新时间无关紧要。

对于此列,有一些高度使用的查询会搜索COL值在某个范围内的行,还有一些更常用的查询会搜索COL与值直接比较的行(相等性检查)。

考虑到上述情况,同时持有 aBTREEHASHindex是否有益COL?优化器会将BTREE索引用于范围查询,将HASH索引用于直接比较查询吗?COL如果是类型,答案会改变varchar(256)吗?

谢谢!