问题标签 [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.
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 %
并没有影响它之后索引的使用。
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 个键时才拆分,则算法将仅在下一次插入时拆分。这让我变得一团糟。
database - B-Tree Indexing:数据库现在如何索引所需的记录
我无法理解以下内容:
假设我有一个带有名称的表:Maria
, José
, John
, Isabel
, ... 假设我现在要搜索名称Maria
并获取所有带有名称的行Maria
。因为它是一个大表,所以我实现了一个B-Tree
(我知道,B-Trees 可以很好地处理范围,但我们只是为了它而假设它)。现在我的表中的每一行都有一个索引,我的数据库可以使用该索引通过B-Tree
. 但是,我不明白。如果我说
数据库如何知道 Maria 有索引,比如 9834759?我的意思是,这必须写在数据库的某个地方,但查找它可能又要花费很多时间,因为它必须将它具有索引的每个名称与WHERE
子句中给出的我的名称进行比较。
我在遵循 B 树时遇到问题是否可以理解?或者更好的是,在数据库中执行?
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。
database - 如何应用索引行“my_table_" btree () 到一张桌子?
我正在管理由第三方创建的 postgres 数据库。
其中一张表被描述为
我理解第一行的意思Indexes
,我知道为了让它“出现在表格描述中”,运行的代码CREATE TABLE
是
Bu 其他两行的含义是什么,应该在CREATE TABLE
(或ALTER TABLE
)哪个命令中运行才能将它们应用于表/“使它们出现在表描述中”?