database - 数据库中的位图索引不能加快查询速度

标签 database oracle indexing

我正在尝试为我的数据库类证明一个陈述。我已经说过,与不使用位图索引相比,使用位图索引可以在列仅包含枚举值(如性别)的表上更快地执行 WHERE 查询。

除此之外,我们尝试证明它对包含大量不同随机值的列的表没有帮助。

我们在 Oracle SQLDeveloper 中创建了两个表,如上文所述,以 10000 行的形式填充了上述信息。 Oracle 的版本是 v11。

我们使用一个过程将信息存储在表中。虽然枚举值随机设置为“S”、“M”或“L”,但另一个表的值是完全随机的(数字和字母)。

首先,我们运行语句:

set timing on
SELECT * FROM INDEXTEST2 WHERE GENDER = 'M' AND MARRIED = 'N' AND CHILDREN = 'Y'

重复运行此脚本最终耗时 00.016 秒。在此之后,我们通过右键单击表创建了一个索引,然后创建了一个索引。我们选择了所有列并检查了 Bitmap。之后,我们再次运行查询几次,只是遇到相同的速度:大约 00.015 秒。我们还尝试删除索引,但没有结果。我们是否遗漏了什么,或者我们是否正确地完成了所有操作,而您只是看不出速度上的差异?

最佳答案

尝试选择较少的行(相对于表格中的所有行)。如果查询选择表中的大部分行,Oracle 的查询优化器可能(正确地)决定只进行全表扫描实际上更快 - 如果它必须加载表堆的大部分或所有 block ,它也可以直接这样做。

除此之外,您的测试集太小了。尝试设置足够大(添加几个零)以使执行时间超出秒表的分辨率(在 Windows 机器上通常为 16 毫秒)。更好的是,选择一个不完全适合缓存的大小。

但即使你做了所有这些,你仍然可能会得到一些奇怪的结果,因为 Oracle 的整体“聪明”。例如,Oracle 11g 引入了 query result cache这会完全扭曲重复查询的执行时间。

关于database - 数据库中的位图索引不能加快查询速度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14260162/

相关文章:

indexing - VHDL std_logic_vector 索引与 "downto"

python - 删除数组中的特定列

python - Openpyxl如何按索引从工作表中获取行

java - 当 Oracle (TAF) 发生故障转移时,java 连接池会发生什么情况?

node.js - node.js 中的 Mongodb 安全性

java - jdbc与mysql连接的步骤是什么

c# - 无法连接到远程 MySQL 数据库

c# - 无效的 IsolationLevel 参数 : must be ReadCommitted or Serializable

c++ - 从 ubuntu 连接到 Oracle 数据库

sql - 如何执行带动态计数的GO语句?