SQL Server 15MM行,简单的COUNT查询。 15秒以上?

时间:2010-04-08 23:59:07

标签: sql-server-2005 performance sql-server-2005-express

在客户决定转换后,我们从另一家公司接管了一个网站。

我们的表每天增加约25,000条记录,目前的记录为15MM。

该表格如下:

id (PK, int, not null)
member_id (int, not null)
another_id (int, not null)
date (datetime, not null)

SELECT COUNT(id) FROM tbl最多可能需要15秒。

'another_id'上的简单内连接需要30秒以上。

我无法想象为什么这么长时间。有什么建议吗?

SQL Server 2005 Express

3 个答案:

答案 0 :(得分:3)

如果你需要一个行数,但是你可以使用一个近似值(不是100%保证是准确的 - 但是给你一个大概),你可以使用SQL Server中的系统目录视图来实现这一点:

SELECT 
    t.Name AS TableName,
    sum(p.rows) as RowCounts
FROM 
    sys.tables t
INNER JOIN      
    sys.indexes i ON t.OBJECT_ID = i.object_id
INNER JOIN 
    sys.partitions p ON i.object_id = p.OBJECT_ID AND i.index_id = p.index_id
WHERE 
    t.Name = 'Your Table Name'
    i.OBJECT_ID > 255 AND   
    i.index_id <= 1
GROUP BY 
    t.NAME, i.object_id, i.index_id, i.name 

给定数据库中的任何表,这将为您提供该表中行数的近似值,并且它非常快(不可测量 - 小于0.01秒)。

答案 1 :(得分:1)

请注意COUNT(id)通常会导致全表扫描,因此必须读取整个表才能获得计数。如果计数对你来说真的非常重要,你可能需要考虑创建一个触发器来将计数结果存储在其他表中。

在没有查询的情况下,我对inner join的评论不多,但我的猜测是您没有idanother_id

的索引

答案 2 :(得分:0)

15 million

上运行的

SQL Server 2005 Express行 你正在使用什么样的硬件?您的数据库可以正确设置,但是如果您没有使用大量ram的专用服务器,那么像这样的大表上的查询会很慢。