【问题标题】:Column Store Index vs Ordinary Index列存储索引与普通索引
【发布时间】:2015-10-29 15:25:59
【问题描述】:

我有一些表,其中两个有大约 100 万条记录。在一个过程中,我使用了这些表,它需要大约 5-10 分钟来获取大约 25,000 行。

我创建了一些聚集索引和非聚集索引,执行计划显示都是聚集索引查找或非聚集索引查找。但该过程仍然需要 5 分钟以上的时间才能执行。

所以我尝试创建列存储索引,但仍然没有改进。

各位,谁能给我建议。我需要如何创建索引以及哪个更好的列存储或普通聚集/非聚集索引

【问题讨论】:

  • “生产”是什么意思?存储过程做什么(选择/插入)?执行计划是什么?对于 5M 行,5 分钟将是 long 时间,而不是 25K。如果存储过程在循环或游标中逐行处理,则创建列存储索引不会使存储过程运行得更快
  • 简单地说,没有任何线索是不可能提供帮助的。您至少需要发布存储过程代码和执行计划。
  • 该程序没有任何循环或光标。它只有一些插入和选择语句。发布查询或执行计划有一些问题我会在与经理讨论后尝试发布执行计划。
  • 对于类似大小的表,您是否具有与其他类似查询类似的性能水平?如果是这样,您可能只是资源受限,可能是在存储级别,甚至可能是内存。当您确定是否可以共享有关查询和执行计划的更多详细信息时,请查看该 SQL Server 实例的可用资源和消耗资源。

标签: sql-server indexing sql-server-2014 clustered-index columnstore


【解决方案1】:

列存储索引是否是一个好主意取决于表/数据库的用途。列存储旨在用于数据仓库中的大型事实表。它不是为 OLTP 或任何其他操作数据库构建的。如果您正在使用数据仓库,集群列存储通常是一个好主意,虽然我认为它是为超过一百万条拖链而设计的,但我认为它仍然可以正常工作,并且您还应该从改进的压缩中受益。

对于 OLTP 或混合使用,您可能只想专注于索引。查看查询计划和statistics io 输出以查看导致缓慢的原因,如果您不知道可能是什么问题,请编辑帖子或询问有关您的表、索引和查询计划的详细信息的新帖子.

查询计划中要查看的典型内容是对大量行的索引扫描、排序和键查找。由于您正在处理数百万行,因此还可能存在假脱机或溢出到导致速度缓慢的临时数据库。

【讨论】:

    猜你喜欢
    • 2019-10-27
    • 1970-01-01
    • 2013-12-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-04-12
    • 2018-07-21
    • 2018-10-13
    相关资源
    最近更新 更多