-1

我不会在这里添加查询,因为查询没有什么特别之处。
在查询中,我在 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 秒。这比以前更糟。
我在添加索引时做错了吗?

4

3 回答 3

0

这个想法是为每个 FK 和 PK 创建索引(这个是自动创建的)这样做,你的加入会加快

于 2012-04-17T17:08:33.823 回答
0

它是按问题分组的。我以不同的方式组织组,现在执行时间以毫秒为单位 :) 这就是我所做的。我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

于 2012-04-15T15:50:44.290 回答
0

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

这将为您提供最佳性能,但维护所有这些索引有很多开销,因此您必须考虑到这一点。

于 2012-04-15T14:51:46.987 回答