Mac*_*ver 9 performance sql-server count netezza query-performance
在进行计数(聚合)SQL 查询时,在这 3 个数据库系统中,什么可以加快执行时间?我相信很多事情都可以加快速度(硬件之一),但我只是一个新手 DBA,所以我相信我会在这里得到一些答案。我将大约 1.57 亿行迁移到 SQL Server 数据库,并且这个查询需要永远执行。但是在我的源 Netezza 数据库中,它需要几秒钟。
例如:
网易6:
SELECT COUNT(*) FROM DATABASENAME..MYTABLE
Run Code Online (Sandbox Code Playgroud)
甲骨文 11g:
SELECT COUNT(*) FROM MYTABLE
Run Code Online (Sandbox Code Playgroud)
SQL Server 2012:
SELECT COUNT(*) FROM DATABASENAME.[dbo].[MYTABLE]
Run Code Online (Sandbox Code Playgroud)
Pat*_*ler 10
Netezza 是一种设计用于在大型表扫描方面表现出色的设备,这就是您在该系统上获得如此快速结果的原因。
对于您的 SQL Server,您可以通过从 sys.dm_db_partition_stats DMV 查询来大大加快行计数。
SELECT s.name AS [Schema], o.name AS [Table], SUM(p.row_count) AS [RowCount]
FROM sys.dm_db_partition_stats p JOIN sys.objects o
ON p.object_id = o.object_id JOIN sys.schemas s
ON o.schema_id = s.schema_id
WHERE p.index_id < 2
AND o.object_id = object_id('MyTable')
GROUP BY o.name, s.name;
Run Code Online (Sandbox Code Playgroud)
在高交易环境中,此 DMV 不能保证 100% 准确。但是从您的问题来看,听起来您只是在进行行计数以在迁移后验证每个表,因此此查询应该适合您。
这是COUNT_BIG
在索引视图中使用的 SQL Server 解决方案。这将为您提供事务一致的计数,而无需大表或索引扫描的开销,也无需后者所需的存储:
CREATE TABLE [dbo].[MyTable](id int);
GO
CREATE VIEW [dbo].[MyTableRowCount]
WITH SCHEMABINDING
AS
SELECT
COUNT_BIG(*) AS TableRowCount
FROM [dbo].[MyTable];
GO
CREATE UNIQUE CLUSTERED INDEX IX_MyTableRowCount
ON [dbo].[MyTableRowCount](TableRowCount);
GO
SELECT
TableRowCount
FROM [dbo].[MyTableRowCount] WITH(NOEXPAND);
Run Code Online (Sandbox Code Playgroud)
这将需要一次初始扫描(无法避免),并为增量表数据操作增加了一些开销。如果您正在使用大量数据进行大型操作(而不是许多小操作),我认为更改的开销应该可以忽略不计。
归档时间: |
|
查看次数: |
17859 次 |
最近记录: |