小编Blu*_*ppy的帖子

PK 索引中的列顺序重要吗?

我有几个具有相同基本结构的非常大的桌子。每个都有一个RowNumber (bigint)DataDate (date)列。每晚都使用 SQLBulkImport 加载数据,并且永远不会加载“新”数据 - 它是历史记录(SQL Standard,不是 Enterprise,因此没有分区)。

因为每一位数据都需要绑定回其他系统,并且每个RowNumber/DataDate组合都是唯一的,那就是我的主键。

我注意到,由于我在 SSMS 表设计器中定义 PK 的方式,RowNumber列在第一和DataDate第二位。

我还注意到我的碎片总是非常高~99%。

现在,因为每个DataDate只出现一次,我希望索引器每天只添加到页面,但我想知道它是否实际上是基于RowNumber第一个索引,因此必须改变其他所有内容?


Rownumber不是标识列,它是由外部系统生成的 int(遗憾的是)。它在每个 开始时重置DataDate

示例数据

RowNumber | DataDate | a | b | c..... 
   1      |2013-08-01| x | y | z 
   2      |2013-08-01| x | y | z 
...
   1      |2013-08-02| x | y | z 
   2      |2013-08-02| x | y | z 
...
Run Code Online (Sandbox Code Playgroud)

数据按RowNumber顺序加载, …

sql-server primary-key clustered-index sql-server-2008-r2

37
推荐指数
2
解决办法
1万
查看次数

我应该在截断/大插入后重建索引吗?

我有一个存储过程,在插入新数据(基于其他表中的数据、计算等)之前,它会截断一些包含大约 1.75M 行的表。

基本大纲很简​​单:

  • 截断表
  • 以每次大约 75,000 的“批次”插入 1.75M 行。

我想知道我是否应该在此过程中的任何时候明确重新构建索引?例如

  • 截断表
  • ALTER INDEX ALL ON xxx REBUILD WITH (FILLFACTOR=90) [或类似的东西]
  • 插入 175 万行

也许

  • ALTER INDEX ALL ON xxx DISABLE
  • 截断表
  • 插入 175 万行
  • ALTER INDEX ALL ON xxx REBUILD WITH (FILLFACTOR=90) [或类似的东西]

感谢任何帮助......不是 DBA - 非常了解 DB 的开发人员更准确!

performance index sql-server

12
推荐指数
1
解决办法
2万
查看次数

“select * from”的所有列的非聚集索引?

SELECT * FROM MyTable WHERE DataDate = '18-AUG-2013'对包含 340 列和 340 万行的表进行了简单查询。

在 SSMS (Ctrl-L) 中运行估计的执行计划建议我在 DataDate 上创建一个非聚集索引并包含所有其他列?

这样做是否明智(一般而言)?在我看来,这会大大增加索引空间和插入等的索引时间。?

ssms sql-server-2008-r2 nonclustered-index

4
推荐指数
1
解决办法
1170
查看次数

从查询中查找实际数据大小?

是否可以找到特定查询将返回的数据大小?

例如,我可以使用以下内容来查找每个日期的行数:

select mydatecolumn, count(*) 
from MyTable
where mydatecolumn < '01-JAN-2014'
group by mydatecolumn
Run Code Online (Sandbox Code Playgroud)

但是有没有办法找出这些行中包含的数据的大小?

例如

select mydatecolumn, "sizeofactualdata",
from mytable
where mydatecolumn < '01-JAN-2014'
group by mydatecolumn
Run Code Online (Sandbox Code Playgroud)

即使每个日期只有一个查询,这也不是问题。

t-sql size

3
推荐指数
1
解决办法
2万
查看次数

如何知道要调查什么以及如何调查非常慢的存储过程

我继承了一个又大又慢的存储过程,它给了我一个噩梦:

我不是DBA,虽然我有一些知识,但我不知道从哪里开始识别这个瓶颈。

我的桌面上安装了 SQL Server 2008,并带有生产数据库的精确副本。我正在从 SSMS 运行所有内容,并且尝试过直接使用 SQL 和 SP。SP 与 SQL 的时间足够接近相同,不必担心 - 这是我关心的本地与服务器的时间。

本地:

  • 2GHz 双核
  • 4Gb 内存
  • SQL Server 2008 Sp1
  • Microsoft SQL Server 2008 R2 (SP1) - 10.50.2500.0(英特尔 X86)
  • Windows NT 6.1 上的企业版(内部版本 7601:Service Pack 1)

服务器:

  • 2GHz 双核
  • 4Gb 内存
  • Microsoft SQL Server 2008 (SP1) - 10.0.2573.0 (X64)
  • Windows NT 5.2(内部版本 3790:Service Pack 2)(VM)上的标准版(64 位)

当我“本地”运行时,大约需要10 分钟才能完成。

当我在服务器上运行时,大约需要14 个小时才能完成!!!

[总插入量约 = 14,000,000]

我已经尝试尽可能多地调整 SP 并避免参数嗅探,但不确定为什么这在几乎等效的机器上会慢得多(我知道 SQL Server 版本略有不同,但不明白为什么会这样)有那么大的不同?) …

performance stored-procedures optimization query-performance

2
推荐指数
1
解决办法
392
查看次数

ALTER DATABASE 命令设置日志文件增长和大小?

创建数据库时是否可以通过脚本更改LOG文件?我需要设置文件大小、增长等,但不指定要创建数据库的位置。例如

CREATE DATABASE [NewDatabase]
GO
ALTER DATABASE [NewDatabase] 
    MODIFY FILE
    (SIZE = 10MB,
    MAXSIZE = UNLIMITED,
    FILEGROWTH = 1MB);
GO
**ALTER DATABASE [NewDatabase]
    MODIFY LOG
    (MAXSIZE = 200MB, 
    FILEGROWTH = 1MB 
    );
GO**
Run Code Online (Sandbox Code Playgroud)

sql-server

1
推荐指数
1
解决办法
4万
查看次数