paweloque Asked: 2011-03-16 06:53:07 +0800 CST2011-03-16 06:53:07 +0800 CST 2011-03-16 06:53:07 +0800 CST 数据库中的多维索引 772 哪些数据库使用真正的多维索引?oracle 是否曾经使用多个索引从表中获取数据,还是总是采用似乎具有最高选择性的索引?其他dbms怎么样? index database-theory 3 个回答 Voted Best Answer Leigh Riffel 2011-03-16T10:09:19+08:002011-03-16T10:09:19+08:00 Oracle 有一种称为位图索引的索引类型,它描述为... 数据库索引,其中数据库存储每个索引键的位图而不是 rowid 列表。 如果表有位图索引或使用了提示,它可以在常规 B 树索引上使用位图访问计划。 位图索引可以连接、联合和相交。 use-the-index-luke.com上有一个很好的解释,其中包括以下组合多个 B-Tree 索引的实现: DB2: DB2 在LUW 9r7(使用动态位图)和zOS v10 上支持多索引访问 。 MySQL: MySQL 从 5.0 版开始具有索引合并优化。 Oracle Oracle 数据库使用 BITMAP CONVERSION 动态组合多个索引(在 9i 中引入)。 PostgreSQL PostgreSQL从 8.1 版开始 使用位图来组合多个索引。 SQL Server SQL Server从 V7.0 开始可以使用散列算法使用多个索引(“Index Intersect”) 。 另请参阅此 StackOverflow 问题,其中第一个答案说 SQL Server 使用索引交集执行类似于位图索引的操作。 用于复杂相似性查询的高效和灵活的位图索引是我发现的将位图索引与单词多维相关联的最接近的参考。多维似乎更像是一种使用索引的方式,而不是它们的属性。 gbn 2011-03-16T07:13:36+08:002011-03-16T07:13:36+08:00 SQL Server 可以执行索引交集: SQL Server 优化器具有许多算法和运算符,可以为您针对系统运行的查询组合可重用的执行计划。 一种是执行索引交集和/或并集的能力,这基本上意味着它可以使用多个索引对一个表进行查询,并执行交集或并集操作以返回结果集。 能够对表使用多个索引允许您创建许多窄索引,优化器可以针对不同的查询计划以不同的方式将这些索引组合在一起。 这反过来又最大限度地减少了对大量专用索引的需求,从而最大限度地减少了索引存储空间和修改影响。 此外,来自Query Tuning Recommendations的文档: 不要在同一查询中为单个表使用多个别名来模拟索引交集。这不再需要,因为 SQL Server 会自动考虑索引交集,并且可以在同一查询中使用同一表上的多个索引。考虑示例查询: SELECT * FROM lineitem WHERE partkey BETWEEN 17000 AND 17100 AND shipdate BETWEEN '1/1/1994' AND '1/31/1994' ``` SQL Server 可以利用 partkey 和 shipdate 列上的索引,然后在两个子集之间执行哈希匹配以获得索引交集。 你是这个意思吗? bernd_k 2011-03-16T08:23:09+08:002011-03-16T08:23:09+08:00 可能 Oracle 位图索引就是您正在寻找的。Oracle 索引类型。 我认为他们允许联合和交叉。但我承认,我对他们并不熟悉。
Oracle 有一种称为位图索引的索引类型,它描述为...
如果表有位图索引或使用了提示,它可以在常规 B 树索引上使用位图访问计划。 位图索引可以连接、联合和相交。
use-the-index-luke.com上有一个很好的解释,其中包括以下组合多个 B-Tree 索引的实现:
另请参阅此 StackOverflow 问题,其中第一个答案说 SQL Server 使用索引交集执行类似于位图索引的操作。
用于复杂相似性查询的高效和灵活的位图索引是我发现的将位图索引与单词多维相关联的最接近的参考。多维似乎更像是一种使用索引的方式,而不是它们的属性。
SQL Server 可以执行索引交集:
此外,来自Query Tuning Recommendations的文档:
你是这个意思吗?
可能 Oracle 位图索引就是您正在寻找的。Oracle 索引类型。
我认为他们允许联合和交叉。但我承认,我对他们并不熟悉。