Dar*_*ong 0 performance sql-server-2008 join foreign-key sql-server
我有一个非常简单的查询:
SELECT COUNT(*)
FROM messages
INNER JOIN users ON messages.user_id = users.user_id
Run Code Online (Sandbox Code Playgroud)
加入需要 1146 毫秒,没有加入需要 220 毫秒(220 毫秒对我来说仍然很慢)。在包含 1,000,000+ 行的消息表上进行测试。
我在两个表 ( message_id
and user_id
)上都设置了主键,并设置了连接messages.user_id
and的外键users.user_id
。
此查询的原因是为分页系统提供记录总数。
我还能做些什么来加速查询?
如果外键不可为空,那么就根本没有理由加入,是吗?那么为什么不让 SQL Server 扫描最有效的可用索引,而不是计算将导致完全相同计数的连接呢?
SELECT COUNT(*) FROM dbo.messages;
Run Code Online (Sandbox Code Playgroud)
也就是说,您可以更有效地执行此操作:
SELECT SUM(rows) FROM sys.partitions
WHERE [object_id] = OBJECT_ID('dbo.messages')
AND index_id IN (0,1);
Run Code Online (Sandbox Code Playgroud)
由于进行中的交易,这会稍微不准确,但它也不会阻止(或被阻止)针对表的任何活动,因此请选择您的毒药。
归档时间: |
|
查看次数: |
8961 次 |
最近记录: |