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 / 问题 / 276121
Accepted
xhr489
xhr489
Asked: 2020-09-27 00:40:21 +0800 CST2020-09-27 00:40:21 +0800 CST 2020-09-27 00:40:21 +0800 CST

在表(堆)上没有聚集索引的好处

  • 772

在 SQL Server 中的表上没有聚集索引有什么好处?

将要:

SELECT * INTO TABLE_A FROM TABLE_B

TABLE_A如果是堆,会更快吗?

如果表是堆,哪些操作将受益?

我很确定UPDATEs 和DELETEs 将从聚集索引中受益。s呢INSERT?我的理解是,INSERT“可能”受益于作为堆的表,无论是在速度方面,还是在其他资源和硬件(I/O、CPU、内存和存储......)方面。

就硬件而言,最稀缺的资源是什么?在存储方面,堆会占用更少的空间吗?磁盘存储不是最便宜的资源吗?如果是这样,将表保留为堆以节省磁盘空间是否合理?SELECT使用、和INSERT,堆将如何影响 CPU 和 I/O ?当 table 是一个 heap 和 we 时,成本会增加多少?UPDATEDELETESELECTUPDATEDELETE

sql-server clustered-index
  • 2 2 个回答
  • 450 Views

2 个回答

  • Voted
  1. Best Answer
    Joe Obbish
    2020-10-06T11:12:35+08:002020-10-06T11:12:35+08:00

    我只是在解决标题中的问题。问题主体有太多不同的问题需要在堆栈交换答案中回答。与具有聚集索引的表相比,堆具有以下优点:

    1. 具有聚集索引的表按这些索引的顺序物理组织数据。如果要插入的数据尚未按聚集键顺序排序,SQL Server 查询优化器可能会向查询计划添加足够大的插入排序。排序执行的额外工作不是免费的,因此查询可能会运行得更慢。插入非分区堆不需要排序的源数据。

    2. 最小日志记录规则在堆和聚集索引之间的工作方式不同。在某些情况下,插入到堆中将写入事务日志的字节数少于插入到具有聚集索引的表中的可比较的字节。有关一些示例,请参阅数据加载性能指南。

    3. 聚集索引可防止并行插入到表中。查询计划的插入部分将始终位于串行区域 (DOP = 1)。从 SQL Server 2016 开始,在没有非聚集索引的堆中插入可以符合并行插入的条件。

    4. 当许多单独的进程插入同一个表时,聚集索引将增加锁和闩锁争用。没有非聚集索引的堆可以由多个进程同时加载,并且争用较少,尤其是当这些插入来自 SQL Server 之外并具有批量更新锁时。

    • 9
  2. David Browne - Microsoft
    2020-09-27T09:58:58+08:002020-09-27T09:58:58+08:00

    如果表是堆,哪个操作会受益?

    在非持久内存优化表之后,堆是加载和读取成本第二低的表设计。所以它非常适合用作临时表。

    对于非常大的表,聚集列存储比堆好得多。加载更昂贵(特别是如果您不批量加载),但它更节省空间,并且阅读速度要快得多。

    除此之外,您的表通常应该有一个聚集的主键。

    • 5

相关问题

  • SQL Server - 使用聚集索引时如何存储数据页

  • 我需要为每种类型的查询使用单独的索引,还是一个多列索引可以工作?

  • 什么时候应该使用唯一约束而不是唯一索引?

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

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

Sidebar

Stats

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

    连接到 PostgreSQL 服务器:致命:主机没有 pg_hba.conf 条目

    • 12 个回答
  • Marko Smith

    如何让sqlplus的输出出现在一行中?

    • 3 个回答
  • Marko Smith

    选择具有最大日期或最晚日期的日期

    • 3 个回答
  • Marko Smith

    如何列出 PostgreSQL 中的所有模式?

    • 4 个回答
  • Marko Smith

    列出指定表的所有列

    • 5 个回答
  • Marko Smith

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

    • 4 个回答
  • Marko Smith

    你如何mysqldump特定的表?

    • 4 个回答
  • Marko Smith

    使用 psql 列出数据库权限

    • 10 个回答
  • Marko Smith

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

    • 4 个回答
  • Marko Smith

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

    • 7 个回答
  • Martin Hope
    Jin 连接到 PostgreSQL 服务器:致命:主机没有 pg_hba.conf 条目 2014-12-02 02:54:58 +0800 CST
  • Martin Hope
    Stéphane 如何列出 PostgreSQL 中的所有模式? 2013-04-16 11:19:16 +0800 CST
  • 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
    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

热门标签

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