问题标签 [bitmap-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.
performance - 向维度表中插入行时,oracle 服务器挂起
有两张桌子。第一个是事实表,大约 1 亿行。另一个是只有大约 100 行的维度表。我在事实表上创建了位图连接索引来优化查询。
但是,当我在维度表中插入几行时,数据库会挂起。
有谁知道可能是什么原因?
oracle - Oracle XE 中未启用位图索引
我正在使用 Oracle 10g XE(速成版)。如果我尝试创建位图索引,则会出现错误
ORA-00439 功能未启用:位映射索引
如何解决此问题并创建位图索引?
database - 特定列的所有位图索引的压缩大小是否最多与表的大小成正比?
我正在阅读 Daniel Lemire 的帖子 The Mythical Bitmap Index ( http://lemire.me/blog/archives/2008/08/20/the-mythical-bitmap-index/ ),他在帖子中说
位图索引的压缩大小最多与表的大小成正比!与不同值的数量无关!
我很难看出他是如何计算这个值的。
我知道长度为 N 的运行长度编码文本的最坏情况下的空间使用与 N (2N?)成正比,所以 O(N)。
我也知道特定列的位图索引数量的最坏情况是当列的基数为 N 时,其中 N 是表中的记录数(因此每条记录在该特定列中都有唯一值) . 这意味着将有 N 个位图索引。
然而,在位图索引的最坏情况假设下,每个位图索引在运行长度编码时将具有恒定的空间使用,因为它只是一些零,1,然后是一些零,所以 O(1)。
因此,在最高基数 N 下所有位图索引的总空间使用量仅为 N x O(1) = O(N)。
但是,对于所有可能的情况,您如何从这个特定的计算转到最坏的情况?我不清楚我描述的情况,其中基数 = N,是所有位图索引加在一起的最坏情况空间使用情况。
您将如何计算为表中的列添加在一起的所有运行长度编码位图索引的最坏情况空间使用情况?
arrays - 位图索引搜索结果数组:在恒定时间内查找非零元素的索引?
据我了解,位图索引搜索将返回一个由 0 和 1 组成的数组,如下所示:
[0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 1, 0, 0, 0]
数组中的每个索引都映射到数据库中某个其他数组中的某个记录,因此要获得结果,您需要找到结果数组中非零元素的索引。
我不明白的是你如何在恒定时间内找到这些指数?我能想到的最好的算法是遍历数组中的每个元素,检查它是否非零,如果它非零,则将该元素的索引写入其他地方。但是,这意味着按顺序查看数组中的每个元素,这是线性时间。所以返回结果所花费的时间将与结果数组的大小成正比,与表中的总行数相同。
但是,我读过的位图索引论文似乎表明查询时间仅与命中数成正比,而不与表中的总行数成正比。参考:
http://crd-legacy.lbl.gov/~kewu/ps/LBNL-59952.pdf
我是不是误会了什么?位图索引搜索的结果不是以数组的形式呈现,而是以其他一些数据结构呈现,可以对非零元素进行恒定时间搜索?
postgresql - 如何在 postgresql 中创建位图索引?(它甚至有位图索引吗?)
我已经“谷歌搜索”了至少一个小时,但我无法找到如何在 postgresql 中创建位图索引,所以我的问题很简单,如何在 postgresql 中编写这个命令(来自 oracle)
sql - PostgreSQL:对同一索引进行交叉索引扫描
试图解决这个问题:Sql: 选择所有包含一组特定项目的篮子
换句话说,有一个表:
itemId已编入索引。
如果我对itemId=2执行扫描,我会得到:
如果我对itemId=4执行扫描,我会得到:
我现在可以将这两个扫描相交以获得:
使用一些 PostgeSQL 高级索引技术,如位图索引?
database - 我们可以在 Oracle 11 中的表列上创建位图索引,它每天使用 Job 重新加载吗
我们有一个表格,它存储有关客户端的信息,这些信息每天使用计划作业从数据仓库加载。该表中有超过 100 万条记录。我想在 Country 列上定义 BitMap Index,因为值的数量有限。如果我们每天删除数据并将数据重新加载到表中,是否对索引有任何影响。我们是否需要在每次加载后显式重建索引
database - 与 btree 索引相比,位图索引如何加快查询速度?
我认为通过让您知道我如何理解 Btree 索引的基本工作原理,您可以更好地了解我来自哪里。我不是 DBA,我是作为对数据结构有基本了解的外行来问这个问题的。
索引的基本思想是,它通过在搜索数据库时跳过大量记录来加快搜索速度。
AFAIK,二叉树数据结构,我假设 Btree 索引所基于的位置,通过将数据划分为节点来帮助我们在不扫描整个数据库的情况下进行搜索。对于过于简单的示例,从 A 到 M 开始的单词存储在左节点中,从 N 到 Z 开始的单词存储在树的第一级的右节点中。在这种情况下,当我们搜索单词“Jackfruit”时,它只会在左侧节点上搜索而跳过右侧节点,从而为我们节省大量时间和 IO。
从这个意义上说,位图索引如何让我们在搜索时不扫描整个数据库?如果没有,它如何加快搜索速度?还是只是为了压缩?
上图是位图的概念图。使用该结构,数据库如何查找行?它会扫描所有行吗?在二叉树中,您不必扫描所有内容这一事实正是它有助于加快搜索速度的方式。除了位图占用更少空间这一事实之外,我看不出任何解释数据库如何在使用位图搜索行方面获得优势。
database - 插入性能 - 位图与 B-Tree
如果我们将选择性能放在一边,在插入时哪个更快。我找不到任何彻底的解释。有人可以解释一下吗?这个问题只是将位图标记为低效,但我想知道为什么。
谢谢,
performance - oracle可以在快速全扫描期间合并位图索引吗?
我有一个包含 300M 行和 50 列的大型事实表。此表上有多个报告,每个报告仅使用表中 50 列中的几列。
事实表中的每一列都用 索引BITMAP INDEX
。这个想法是将这些索引用作原始表的单列版本,假设 oracle 可以BITMAP INDEX
轻松合并 es。
如果我在语句中使用表中的几列WHERE
,我可以看到 oracle 能够有效地合并这些索引。执行计划中有BITMAP AND
预期的操作。
如果我在语句中使用表中的几列SELECT
,我可以看到根据列的选择性,oracle 要么执行不需要的转换,TABLE ACCESS
要么执行这些转换。BITMAP CONVERSION [to rowids]
HASH JOIN
有什么办法可以消除HASH JOIN
在加入几个BITMAP INDEX
es的情况下?BITMAP MERGE
当列出现在SELECT
语句中而不是语句中时,oracle 中是否有强制提示WHERE
?
HASH JOIN
直观上看, for BITMAP INDEX
es似乎是语句中不需要的操作,SELECT
考虑到它确实在WHERE
语句中是不需要的。但我找不到任何证据表明 oracle 可以避免它。
这里有些例子:
是否有优化示例 #1 和 #2 的提示?
在生产中,我使用 oracle11g,但我在 oracle12c 上尝试了类似的查询,看起来在两个版本的 oracle 中都表现相同。