AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / dba / 问题 / 10411
Accepted
JNK
JNK
Asked: 2012-01-10 13:36:33 +0800 CST2012-01-10 13:36:33 +0800 CST 2012-01-10 13:36:33 +0800 CST

列存储索引的结构是什么?

  • 772

SQL Server 2012 中代号Denali为列存储索引的新功能之一。

我对常规的旧行存储索引了解很多,例如 b-tree 结构、叶级和 b-tree 页面之间的存储差异、包含字段的影响、优化使用它们、键的顺序等。

我很难获得有关列存储索引 内部的任何好的信息。

  • 它的结构如何?
  • 有b树吗?其他结构到位了吗?
  • 数据是如何组织的?
  • 什么样的特定运算符最适合使用它?
  • 使用它们时要避免的任何其他反模式?

我能找到的很多关于它们的内容基本上与“正常”索引完全相反,即没有键的排序,没有包含的字段,只有非聚集的。

任何见解都值得赞赏。

sql-server index
  • 1 1 个回答
  • 2528 Views

1 个回答

  • Voted
  1. Best Answer
    Paul White
    2012-01-12T08:40:30+08:002012-01-12T08:40:30+08:00

    列存储结构

    列存储数据物理存储在每列一个或多个 段(常规 LOB 分配单元)中,也可以按通常的方式进行分区。每个段包含大约一百万行高度压缩的值或值引用(有多种压缩技术可用)。值引用链接到最多两个散列字典之一中的条目。

    字典在查询执行期间固定在内存中,每当执行需要实际数据值时,都会在字典中查找来自段的数据值 ID(出于性能原因,此查找会尽可能延迟)。

    段还具有包含元数据的标头记录,例如存储在段中的最小值和最大值。来自标头的信息通常可用于在执行时从处理中消除完整的分区。标头记录信息存储在通常的 LOB 数据根结构中,因此消除段意味着存储引擎可以跳过从物理存储中完全读取 LOB 数据页。最大限度地消除消除的可能性可能需要仔细设计,包括在构建列存储索引时对聚集索引顺序的依赖。

    特定计划运营商

    SQL Server 2012 引入了一种称为批处理模式的新执行模式。在这种模式下,大约 1000 行的数据包在算子之间传递,显着提高了处理器的使用效率。在每个数据包中,柱状数据表示为一个向量。并非所有计划运算符都支持批处理模式操作,但支持的示例包括 Columnstore Index Scan、Hash Inner Join、Batch Hash Table Build、Bitmap Filter、Hash Aggregate(非标量聚合)、Filter 和 Compute Scalar(用于投影和表达式评估)。查询执行计划已得到增强,以显示估计和实际执行模式。

    反模式

    第一个版本有很多限制,包括对允许的数据类型的限制。支持最常见的类型;不支持的数据类型包括DECIMAL精度大于 18 位、(N)VARCHAR(MAX)、UNIQUEIDENTIFIER、 CLR 类型和(VAR)BINARY.

    使用字符串类型, OUTER JOIN, IN,EXISTS , NOT IN, OR,UNION ALL可能会导致性能显着降低(行模式执行),除非采用通常涉及异常语法重写的变通方法,如本节链接文章中所示。

    更多信息

    Remus Rusanu 在这里发表了一篇很棒的博客文章。

    • 23

相关问题

  • 死锁的主要原因是什么,可以预防吗?

  • 我在索引上放了多少“填充”?

  • 如何确定是否需要或需要索引

  • RDBMS 上的“索引”是什么意思?[关闭]

  • 如何在 MySQL 中创建条件索引?

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    如何查看 Oracle 中的数据库列表?

    • 8 个回答
  • Marko Smith

    mysql innodb_buffer_pool_size 应该有多大?

    • 4 个回答
  • Marko Smith

    列出指定表的所有列

    • 5 个回答
  • Marko Smith

    从 .frm 和 .ibd 文件恢复表?

    • 10 个回答
  • Marko Smith

    如何在不修改我自己的 tnsnames.ora 的情况下使用 sqlplus 连接到位于另一台主机上的 Oracle 数据库

    • 4 个回答
  • Marko Smith

    你如何mysqldump特定的表?

    • 4 个回答
  • Marko Smith

    如何选择每组的第一行?

    • 6 个回答
  • Marko Smith

    使用 psql 列出数据库权限

    • 10 个回答
  • Marko Smith

    如何从 PostgreSQL 中的选择查询中将值插入表中?

    • 4 个回答
  • Marko Smith

    如何使用 psql 列出所有数据库和表?

    • 7 个回答
  • Martin Hope
    Mike Walsh 为什么事务日志不断增长或空间不足? 2012-12-05 18:11:22 +0800 CST
  • Martin Hope
    Stephane Rolland 列出指定表的所有列 2012-08-14 04:44:44 +0800 CST
  • Martin Hope
    haxney MySQL 能否合理地对数十亿行执行查询? 2012-07-03 11:36:13 +0800 CST
  • Martin Hope
    qazwsx 如何监控大型 .sql 文件的导入进度? 2012-05-03 08:54:41 +0800 CST
  • Martin Hope
    markdorison 你如何mysqldump特定的表? 2011-12-17 12:39:37 +0800 CST
  • Martin Hope
    pedrosanta 使用 psql 列出数据库权限 2011-08-04 11:01:21 +0800 CST
  • Martin Hope
    Jonas 如何使用 psql 对 SQL 查询进行计时? 2011-06-04 02:22:54 +0800 CST
  • Martin Hope
    Jonas 如何从 PostgreSQL 中的选择查询中将值插入表中? 2011-05-28 00:33:05 +0800 CST
  • Martin Hope
    Jonas 如何使用 psql 列出所有数据库和表? 2011-02-18 00:45:49 +0800 CST
  • Martin Hope
    bernd_k 什么时候应该使用唯一约束而不是唯一索引? 2011-01-05 02:32:27 +0800 CST

热门标签

sql-server mysql postgresql sql-server-2014 sql-server-2016 oracle sql-server-2008 database-design query-performance sql-server-2017

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve