作为发布的结果,数据库表现得“异常”。我怀疑在最近的版本中遗漏了一个存储过程,但是我的 DBA 告诉我它 100% 已执行。
有没有办法明确证明它是或不是?
作为发布的结果,数据库表现得“异常”。我怀疑在最近的版本中遗漏了一个存储过程,但是我的 DBA 告诉我它 100% 已执行。
有没有办法明确证明它是或不是?
我有一个 SQL Server 数据库,其中的日志文件很大并且每天都在增长。
我已经归档了数据库中的数据,然后进行了完整备份。我期待日志基本上是“空的”。例如,它可能是相同的物理大小,但现在有很多可用空间。但是,它目前只有 0.1% 免费。
任何想法为什么日志中仍然几乎没有可用空间?
是否可以找到特定查询将返回的数据大小?
例如,我可以使用以下命令查找每个日期的行数:
select mydatecolumn, count(*)
from MyTable
where mydatecolumn < '01-JAN-2014'
group by mydatecolumn
但是有没有办法找出这些行中包含的数据的大小?
例如
select mydatecolumn, "sizeofactualdata",
from mytable
where mydatecolumn < '01-JAN-2014'
group by mydatecolumn
即使每个日期只有一个查询,这也不是问题。
我有一个 qeuery 检查两列在哪里不是''(空白) - [在这种情况下空白和 NULL 不一样]
有没有办法提高查询的性能
SELECT *
FROM myTable
WHERE Currency <> ''
AND Country <> ''
据我了解,<>
是否导致了完整的表扫描?
我有几张非常大的桌子,基本结构相同。每个都有一个RowNumber (bigint)
和DataDate (date)
列。每晚使用 SQLBulkImport 加载数据,并且从未加载任何“新”数据 - 它是历史记录(SQL 标准,而不是企业,因此没有分区)。
因为每一位数据都需要绑定回其他系统,而且每个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
...
数据正在按RowNumber
顺序加载,DataDate
每次加载一个。
导入过程是 bcp - 我尝试加载到临时表,然后从那里按顺序选择 ( ORDER BY RowNumber, DataDate
) 但仍然出现高碎片。
我对SELECT * FROM MyTable WHERE DataDate = '18-AUG-2013'
包含 340 列和 3.4M 行的表进行了简单查询。
在 SSMS (Ctrl-L) 中运行估计的执行计划建议我在 DataDate 上创建一个非聚集索引并包括所有其他列?
这是明智的做法(一般而言)吗?在我看来,这会大大增加索引空间和插入索引的时间等?
我有一个存储过程,它会在插入新数据(基于其他表中的数据、计算等)之前截断一些表,每个表大约有 175 万行。
基本大纲很简单:
我想知道是否应该在此过程中的任何时候明确地重新构建索引?例如
ALTER INDEX ALL ON xxx REBUILD WITH (FILLFACTOR=90)
[或类似的东西]也许
ALTER INDEX ALL ON xxx DISABLE
ALTER INDEX ALL ON xxx REBUILD WITH (FILLFACTOR=90)
[或类似的东西]任何帮助表示赞赏......不是 DBA - 非常了解 DB 的开发人员更准确!