无需关闭站点的情况下如何查询ASP.NET 2.0 Membership表
这种查询会爽快的运行在你的开发环境中:
Select * from aspnet_users where UserName = 'blabla'
或者在无需任何问题的情况下获得一些用户的 profile :
Select * from aspnet_profile where userID = '…...'
甚至你可以像这样在aspnet_membership表中轻松的更新用户的邮件地址:
Update aspnet_membership
SET Email = 'newemailaddress@somewhere.com'
Where Email = '…'
但是当在你的产品服务器上有一个巨大的数据库时,运行这些脚本都会搞垮你的服务器。理由就是, 虽然这些查询看起来明显是你经常使用的语句,但是这些语句没有任何索引。因此,上面所有在"Table Scan"中的结果(很糟糕的查询方式)都会响应数百万行记录。
这里的现象对我们而言意味着什么。我们使用了这些字段诸如UserName, Email, UserID, IsAnonymous等。关于Pageflakes的很多市场报表。这些报表中的一些仅仅市场部可以使用,其他人都不 可以使用它。现在,站点运行得很好,但是市场部一天当中会使用它很多次而且用户常常打电话告诉我们 网站太慢了,”用户报告网站性能十分地慢!”,一些页面甚至还发生超时等现象。
常常,当他们打电话个给我们的时候,我们就会告诉他们“稍等,马上检查”,然后我们开始对整个 网站进行检查。我们使用SQL profiler工具来查看到底那里出错了。但是我们不能找到任何问题。 Profiler显示了查询运行的摁件。CPU负载位于适当的参数范围内。站点运行得很好,很流畅。我们打电 话给他们,“我们不能查到任何问题,到底怎么了?”。
因此,当我们试图调查这个问题并且在我们没有调查时,发现站点真的变得很慢的时候,为什么我们 不能看到它变慢的任何问题?
市场部有时候每天需要很多次运行一些分析报表来查询数据。无论什么时候他们执行这些查询,当这 些字段都是不是索引时,它会使得服务器的IO吞吐量更高以及CPU的使用率增高: