问题标签 [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.
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 结构?
提前致谢。
postgresql - Postgresql BTREE 索引行大小限制
显然 Postgresq 中的 B-tree 索引存在行大小限制(以字节为单位),如果字符串太大,则会导致索引创建失败。
如何创建部分索引来克服这个丑陋的限制?通常,我有两个想法:A)将截断的字符串存储在部分索引中 B)仅存储字符串满足大小限制的那些行
您有什么建议或示例,如何创建这样的部分索引?
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
sqlite - SQLite 是否支持批量加载(排序然后索引)?
从现有数据构建索引树时,有一种批量加载算法,如
为非空表创建索引时,SQLite 是使用批量加载还是通过插入创建索引?从我的性能测试来看,SQLite 似乎使用插入来创建索引,因为索引后插入表和插入后创建索引之间的时间成本相似。
我们知道为什么不使用批量加载吗?在实践中不是很好用吗?
sql - 多列上的PostgreSQL索引,什么时候太多了?
使用 PostgreSQL 9.6
我有一个表,其中包含一些我想过滤并按时间排序的值:
- 时间戳(可能是在 UI 中选择的范围)
- 状态字符串(目前只有几个已知值,也可以在 UI 中选择)
- 上下文(UI 中数据的范围)
我想知道我是否应该:
- (上下文,状态)上的 btree 索引 + 时间上的单独索引
- 或(上下文、状态、时间)上的 btree 索引
- 或者每个都有一个 btree 索引?
- 或在(时间、状态、上下文)上的 btree 索引,用于小时间范围?
我怀疑数字 1 是最好的选择,上下文 + 状态将允许过滤掉值,然后它会扫描时间索引。我在我的数据上同时创建了 1 号并看到了一些改进,但是您如何在每种方法之间做出决定,是否有一些指导方针?
其中一个查询或多或少类似于:
另一个正在寻找时间范围。我看起来 postgres 使用多个索引,一个使用 (fk_context, severity, timestamp) 然后使用 (severity, time) 索引,但它也取决于限制。
google-cloud-firestore - Google Firebase Firestore 使用什么数据结构作为默认索引
我很好奇是否有人知道或猜到 Google 的 Firestore 用于按每个字段索引任意 NoSQL 文档的数据结构。我正在寻找构建类似的东西,使其尽可能高效。
有关其默认索引如何工作的一些信息:
- 默认情况下所有字段都被索引,但仅适用于相等搜索而不是范围(<,>)
- 任何范围搜索都需要额外的索引
- 资料来源:https ://firebase.google.com/docs/firestore/query-data/indexing
它不太可能是每个字段的标准 btree 索引,因为范围搜索可以在不添加对另一个索引的要求的情况下工作。另外,如果您添加了一个新字段(使用文档存储很容易),则需要花费时间来构建包含数十亿个项目的索引和集合。
一种理论:每个文档 1 个大索引。每个文档中每个字段的索引“field_name:value”。索引映射到包含该字段/值对的排序列表文档 ID。它将能够进行相等搜索(我为每个相等要求合并排序的 doc-id),但不能进行范围搜索。基本上是倒排索引。
有什么建议可以更好地实现这样的模式吗?
mysql - B树的最小占用率是多少?
我对 B-Tree 概念相当陌生,我目前正在阅读可以在这里找到的课程的幻灯片: http ://www-db.deis.unibo.it/courses/TBD/Lezioni/02%20 -%20 指数.pdf
我读到 B 树的“最小占用率”为 50%。
这意味着什么?这是最低入住率的好百分比吗?更高/更低的最低入住率更好吗?
谢谢
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?
mysql - MySQL - 同一列的 BTree 和哈希索引
我曾尝试找到类似的问题,但没有找到任何问题,除了关于同一列的两个索引的问题(通常)。
让我们假设我们有一个带有列的表COL
。该表(和整个数据库)对于客户端是只读的(让我们假设它每隔很长一段时间更新一次/一次,并且仅由后端服务更新)。因此,插入/更新时间无关紧要。
对于此列,有一些高度使用的查询会搜索COL
值在某个范围内的行,还有一些更常用的查询会搜索COL
与值直接比较的行(相等性检查)。
考虑到上述情况,同时持有 aBTREE
和HASH
index是否有益COL
?优化器会将BTREE
索引用于范围查询,将HASH
索引用于直接比较查询吗?COL
如果是类型,答案会改变varchar(256)
吗?
谢谢!