我有几个具有相同基本结构的非常大的桌子。每个都有一个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顺序加载, …
我有一个存储过程,在插入新数据(基于其他表中的数据、计算等)之前,它会截断一些包含大约 1.75M 行的表。
基本大纲很简单:
我想知道我是否应该在此过程中的任何时候明确重新构建索引?例如
ALTER INDEX ALL ON xxx REBUILD WITH (FILLFACTOR=90) [或类似的东西]也许
ALTER INDEX ALL ON xxx DISABLEALTER INDEX ALL ON xxx REBUILD WITH (FILLFACTOR=90) [或类似的东西]感谢任何帮助......不是 DBA - 非常了解 DB 的开发人员更准确!
我SELECT * FROM MyTable WHERE DataDate = '18-AUG-2013'对包含 340 列和 340 万行的表进行了简单查询。
在 SSMS (Ctrl-L) 中运行估计的执行计划建议我在 DataDate 上创建一个非聚集索引并包含所有其他列?
这样做是否明智(一般而言)?在我看来,这会大大增加索引空间和插入等的索引时间。?
是否可以找到特定查询将返回的数据大小?
例如,我可以使用以下内容来查找每个日期的行数:
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)
即使每个日期只有一个查询,这也不是问题。
我继承了一个又大又慢的存储过程,它给了我一个噩梦:
我不是DBA,虽然我有一些知识,但我不知道从哪里开始识别这个瓶颈。
我的桌面上安装了 SQL Server 2008,并带有生产数据库的精确副本。我正在从 SSMS 运行所有内容,并且尝试过直接使用 SQL 和 SP。SP 与 SQL 的时间足够接近相同,不必担心 - 这是我关心的本地与服务器的时间。
本地:
服务器:
当我“本地”运行时,大约需要10 分钟才能完成。
当我在服务器上运行时,大约需要14 个小时才能完成!!!
[总插入量约 = 14,000,000]
我已经尝试尽可能多地调整 SP 并避免参数嗅探,但不确定为什么这在几乎等效的机器上会慢得多(我知道 SQL Server 版本略有不同,但不明白为什么会这样)有那么大的不同?) …
performance stored-procedures optimization query-performance
创建数据库时是否可以通过脚本更改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)