如何在列上创建索引以增加查询的执行

时间:2012-04-15 13:54:29

标签: sql sql-server database tsql

我不会在这里添加查询,因为查询没有什么特别之处 在查询中,我在10张桌子上留下了联接。

...left join tableB b on a.UserId = b.UserId
left join tableC c on a.UserId = c.UserId
left join tableD d on a.UserId = d.UserId

执行此查询 23秒。那太已经太多了 所有表都由UserId外键连接,类型为uniqueidentifier 现在我想我可能需要添加索引但是我第一次这样做了,我不确定我做得对。
在管理工作室,我转到table design > manage keys indexes > add index > in dropdown I select UserId (ASC)
我在所有10个表中执行此操作,并且在运行查询后执行查询 45秒。这比以前更糟糕。
我在添加索引时做错了吗?

3 个答案:

答案 0 :(得分:0)

如果您选择除用户ID之外的任何其他列,则在用户ID上添加索引将无法帮助您。为了获得最佳性能,您可以在按用户标识排序的每个表上创建一个非聚集索引,并且还包含查询所需的所有其他列。

这样可以提供最佳性能,但是维护所有这些索引会产生大量开销,因此您必须考虑到这一点。

答案 1 :(得分:0)

分组问题。我组织的组有点不同,现在执行时间在几毫秒:)这就是我做的。我从select和整个组中删除count(),然后从我写中删除:

select S3.TotalCheckIns
...
left join (select userid, count(CheckInId) as TotalCheckIns
   FROM dbo.checkins
   GROUP BY UserId) S3 on p.UserId = S2.UserId
   where p.UserId = @m_UserId

我使用了此链接中的技术http://weblogs.sqlteam.com/jeffs/archive/2005/12/14/8546.aspx

答案 2 :(得分:0)

Idea是每个FK和PK的创建索引(这是自动创建的),这样做,你的连接将加速