问题标签 [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 投票
0 回答
18 浏览

mysql - LIKE 查询没有禁用 MySQL 中的复合索引的原因是什么

这是我的表结构

当我使用explain select * from t where c1='1' and c2 >'2' and c3='4'时,解释结果显示key_len只有 6,即只有 c1 和 c2 处于活动状态。

但是,执行后explain select * from t where c1='1' and c2 like '2%' and c3='4',结果显示key_len为 9,所有索引都处于活动状态。

我认为LIKE %查询是一个范围查询,例如<and >,而 的出现LIKE %并没有影响它之后索引的使用。

0 投票
0 回答
61 浏览

c - 插入 B 树

我需要这方面的帮助。

我正在尝试实现 B-tree 插入,但由于我对这种算法感到困惑,所以我陷入了某些困境。根据作者 Cormen 的算法简介一书中的 B-tree 伪代码,在我看来,我正在编写正确的 B-tree 插入代码,但是当我在运行算法后检查磁盘中的 B-tree 时,数据是错误的。我不知道为什么我在这段代码中做错了。

算法简介页面: http: //staff.ustc.edu.cn/~csli/graduate/algorithms/book6/chap19.htm

我的 btree.c 文件:

我的 btree.h 文件:

在这个 B 树中,顺序是 5。那么,我在同一个节点中最多可以得到 4 个键和 5 个指针。我的疑问之一是 splitChild 算法。如果我根据本书的算法准确地获得节点中的最大密钥,我将如何拆分节点并提升密钥?如果我给每个节点多一个空间来插入键,并且仅当它在节点中具有最大 + 1 个键时才拆分,则算法将仅在下一次插入时拆分。这让我变得一团糟。

0 投票
0 回答
23 浏览

database - B-Tree Indexing:数据库现在如何索引所需的记录

我无法理解以下内容:

假设我有一个带有名称的表:Maria, José, John, Isabel, ... 假设我现在要搜索名称Maria并获取所有带有名称的行Maria。因为它是一个大表,所以我实现了一个B-Tree(我知道,B-Trees 可以很好地处理范围,但我们只是为了它而假设它)。现在我的表中的每一行都有一个索引,我的数据库可以使用该索引通过B-Tree. 但是,我不明白。如果我说

数据库如何知道 Maria 有索引,比如 9834759?我的意思是,这必须写在数据库的某个地方,但查找它可能又要花费很多时间,因为它必须将它具有索引的每个名称与WHERE子句中给出的我的名称进行比较。

我在遵循 B 树时遇到问题是否可以理解?或者更好的是,在数据库中执行?

0 投票
0 回答
39 浏览

postgresql - Postgresql 规划器不会为“NOT”查询选择索引

[标题更新以反映描述中的更新]

我正在运行 Postgresql 9.6

我有一个复杂的查询,它没有使用我期望的索引,当我把它分解成这个小例子时,我不知道为什么没有使用索引。

这些示例在具有 100 万条记录的表上运行,当前所有记录的列状态值为“COMPLETED”。状态是一个文本列,我有一个 btree 索引。

以下查询按我的预期使用我的索引:

但是,如果我在引用我的表的选择中添加任何其他内容,那么规划器会选择执行顺序扫描。

即使这个更简单的例子也有同样的问题。

用途指数:

不使用索引:

[更新]我现在明白(对于这种情况)它正在使用的索引只有 INDEX,在这种情况下它将停止使用它,因为类型也不在索引中。所以问题可能是它为什么不在下面的“不”情况下使用它:

当我使用不在表中的不同值时,我知道使用索引(这是有道理的):

但如果我不这样做,它不会:

为什么我的索引没有被使用?

我能做些什么来确保它被使用?

大多数时候,我希望该表中的几乎所有记录都处于许多最终状态之一(使用 IN 运算符);。因此,当运行我的更复杂的查询时,我希望这些记录应该尽早并快速地从查询的更昂贵的部分中排除。

[更新]

看起来“NOT”不是受支持的 B-Tree 操作。我需要某种独特的方法:https ://www.postgresql.org/docs/current/indexes-types.html#INDEXES-TYPES-BTREE

我尝试添加以下部分索引,但它们似乎不起作用:

此部分索引确实有效,但不是理想的解决方案。

我也试过这个表达式索引,虽然也不理想也没有奏效:

使用具有 equals 的状态列表(在子句中)。所以我可能必须弄清楚我更大的查询才能不使用NOT。

0 投票
1 回答
23 浏览

database - 如何应用索引行“my_table_" btree () 到一张桌子?

我正在管理由第三方创建的 postgres 数据库。

其中一张表被描述

我理解第一行的意思Indexes,我知道为了让它“出现在表格描述中”,运行的代码CREATE TABLE

Bu 其他两行的含义是什么,应该在CREATE TABLE(或ALTER TABLE)哪个命令中运行才能将它们应用于表/“使它们出现在表描述中”?