但是当市场部给我们打电话时,这些问题从来没发生过,并且我们没有挂断电话并试图找出问题所在。因为当他们打电话给我们时,会跟我们交谈,他们没有运行使服务器垮掉的任何报表。让他们停留在了站点上的其它地方,几乎做了和用户一样的事情.
咱们看看如下索引:
表: aspnet_users
•簇索引 = ApplicationID, LoweredUserName
•非簇索引 = ApplicationID, LastActivityDate
•主键 = UserID
表: aspnet_membership
•簇索引 = ApplicationID, LoweredEmail
•非簇索引 = UserID
表: aspnet_Profile
•簇索引 = UserID
大部分索引都有ApplicationID在其中。除非你放置ApplicationID='…'在WHERE从句中,此时它就不会使用任何索引。结果,所有的查询会进行全表扫描。仅仅是把ApplicationID放在where从句中(从aspnet_Application表中找到你的ApplicationID)所有的查询就会变得非常快。
不要在WHERE从句中使用Email或者UserName。他们不是索引的一部分,从而取代LoweredUserName和LoweredEmail字段。所有的查询必须在WHERE从句中有ApplicationID。
我们的管理站点上包涵了很多这种报表并且每个报表都包涵了很多这种在表aspnet_users、 aspnet_membership 和aspnet_Profile上的查询。结果,当市场部试图产生报表时,它们会占用所有CPU、HDD的资源,最终导致站点变得非常慢甚至毫无响应。
确保你总是检查了所有的WHERE和JOIN从句。否则当你的网站上线时会出现大问题。