Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/84.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 加速计数_Sql_Sql Server_Tsql - Fatal编程技术网

Sql 加速计数

Sql 加速计数,sql,sql-server,tsql,Sql,Sql Server,Tsql,如果您查看此页面:您将发现一个实际上无法访问的页面,因为加载它可能需要30秒以上的时间。原因在于,有一个计数器可以统计每个类别中的业务成员数量。我想知道是否有办法加速我现有的脚本,因为现在我们有超过一百万的成员,而当前状态下的脚本是无用的。以下是我当前的脚本: SELECT COUNT(MemberID) AS MembersInCountyCat FROM Member WHERE NYKACountyID = @NYKACountyID AND ( NYKACatID IN

如果您查看此页面:您将发现一个实际上无法访问的页面,因为加载它可能需要30秒以上的时间。原因在于,有一个计数器可以统计每个类别中的业务成员数量。我想知道是否有办法加速我现有的脚本,因为现在我们有超过一百万的成员,而当前状态下的脚本是无用的。以下是我当前的脚本:

SELECT COUNT(MemberID) AS MembersInCountyCat
FROM Member
WHERE NYKACountyID = @NYKACountyID
AND (
        NYKACatID IN (
            SELECT NYKACatID
            FROM NYKACat
            WHERE ParentID = @NYKACatID
        )
        OR
        NYKACatID = @NYKACatID
    )
AND ProfileTypeID <> 1
任何关于如何加快sql脚本速度的建议都将不胜感激

多谢各位

新杰克

SELECT COUNT(MemberId) AS MembersInCountyCat
FROM Member
    INNER JOIN NYKACat ON Member.NYKACatId = NYKACat.NYKACatId 
WHERE NYKACountyId = @NYKACountyId
    AND (NYKACat.NYKACatId = @NYKACatId OR NYKACat.ParentId = @NYKACatId)
    AND ProfileTypeId <> 1

确保在ProfileTypeID、Member.NYKACountyId和Member.NYKACatId上有索引。

请尝试一下。将NYKACat条件移动到联接中可能会有所帮助,但我认为这不会伤害它。如果NYKACat.ParentID=@NYKACatID或NYKACat.NYKACatID=@NYKACatID从NYKACat中删除了大部分行,那么它可以提前完成这项工作

使用nolock允许脏读 如果你不能接受肮脏的阅读,那就把它摘下来

SELECT COUNT(Member.MemberID) AS MembersInCountyCat
FROM  Member  with (nolock) 
JOIN  NYKACat with (nolock)
  on  NYKACat.NYKACatID = Member.NYKACatID
 and (NYKACat.ParentID = @NYKACatID or NYKACat.NYKACatID = @NYKACatID)
WHERE Member.NYKACountyID = @NYKACountyID
  and Member.rofileTypeID <> 1

请提供示例数据和所需结果,这样我们就不必对您的查询进行反向工程。您是否有MYKACountyID、NYKACatID、ParentID和ProfileTypeID的索引?这将是最有可能从指数中获益的候选人,以加速事情的发展。。。另外:您使用的是什么版本的SQL Server?根据ProfileTypeID 1子句中匹配或排除的行数,2008年及更新版本中可用的筛选索引可能是有益的。s必须是实时的吗?在这种情况下,我使用缓存表来保存摘要统计信息的副本。根据使用频率和重新计算的费用,计划作业刷新缓存,或者在缓存过期后第一个访问缓存的用户必须等待缓存刷新。这通常发生在必须从外部数据源(如易趣)检索数据时。希望有关索引和触发器的建议更适用于您的问题。我如何检查是否有索引。。?如果没有,我如何创建一个呢?我将sql脚本更改为您放置的内容,并创建了一个包含您建议的字段的新索引。。而且效果很好。。非常感谢你。。