小编Tia*_*ago的帖子

为什么我的索引查找可以估计正确的行数而排序运算符不能?

我有一个在谓词上使用函数的查询,如下所示:

commentType = 'EL'
AND commentDateTime >= DATEADD(month,datediff(month,0,getdate()) - 13,0)
Run Code Online (Sandbox Code Playgroud)

我在 commentType 上有一个过滤索引,它有 40K 行,当我运行查询时,Index Seek 的估计行数非常准确(大约 11K),但对于下一步(排序运算符),它完全忽略了统计信息和只是估计过滤索引中的总行数。

为什么会这样?我知道有关sargability的基础知识,并且我只是为了理智而进行了测试,将 dateadd 替换为实际日期(2014-01-01),瞧......排序开始正确猜测行数......

为什么会发生这种情况,我该如何解决?我不能通过一个固定的日期...

index sql-server statistics

11
推荐指数
1
解决办法
387
查看次数

REDO 线程中的死锁,1 个副本正常,其他没有?

我有一个 3 节点集群,由于死锁,2 个辅助节点最初进入 SUSPECT 模式。我试图恢复两者,但只有一个赶上了,而另一个则不断陷入僵局。我必须承认,解决死锁问题并不是我的主要强项,而且由于 xml 提供的信息很少,我无法弄清楚发生了什么。这个数据库有 4 个全文索引,死锁图中报告的 pageID 有 m_type 10 = IAM page ? 有什么办法可以恢复REDO,还是需要删除副本并重新设置?如果日志序列相同,我无法理解为什么另一个节点会赶上?

非常感谢

<deadlock>
  <victim-list>
    <victimProcess id="process23bb0c8" />
  </victim-list>
  <process-list>
    <process id="process23bb0c8" taskpriority="-20" logused="0" waitresource="PAGE: 21:1:47934 " 
    XDES="0x407dc8ff0" lockMode="X" schedulerid="2" kpid="4604" status="background" spid="66" sbid="0" ecid="0" priority="0" trancount="0">
      <executionStack />
      <inputbuf />
    </process>
  </process-list>
  <resource-list>
    <pagelock fileid="1" pageid="47934" dbid="21" subresource="FULL" 
    objectname="DB.sys.fulltext_index_1_69575286" id="lock417f18100" mode="IX" associatedObjectId="72057594044219392">
      <owner-list>
        <owner id="process23bb0c8" mode="IX" />
        <owner id="process23bb0c8" mode="IX" />
        <owner id="process23bb0c8" mode="IX" />
        <owner id="process23bb0c8" mode="IX" />
        <owner id="process23bb0c8" mode="X" …
Run Code Online (Sandbox Code Playgroud)

sql-server deadlock availability-groups

5
推荐指数
0
解决办法
135
查看次数

SQL Server 拒绝的筛选索引提示

我有一个 SQL Server 没有使用的筛选的非聚集索引。我很确定优化器正在做正确的选择,但我想强制它使用该索引运行,以便我可以比较计划并了解为什么它更昂贵。

我已经从查询中删除了所有内容,我只是选择了正在过滤的列。

索引定义:

CREATE INDEX idx_all
    ON tbl_test (CommentDateTime, name)
    INCLUDE (comment, CommentByType)
    WHERE CommentByType='INT';
Run Code Online (Sandbox Code Playgroud)

我试图运行的查询是:

SELECT CommentByType
FROM tbl_test WITH (INDEX (idx_all))
WHERE CommentByType='INT';
Run Code Online (Sandbox Code Playgroud)

并且 SQL Server 返回以下错误:

Query processor could not produce a query plan because of the hints defined in this query.
Resubmit the query without specifying any hints and without using SET FORCEPLAN.
Run Code Online (Sandbox Code Playgroud)

我已经阅读了很多关于被过滤的列被包含在键中或作为包含列的信息,但没有任何帮助。

在此处输入图片说明

sql-server-2008 sql-server filtered-index

3
推荐指数
1
解决办法
1014
查看次数

使用 TOP 条件估计的行数有误

我想这是一个非常基本的问题,但我无法理解它。我对一列有完美的统计数据,但是在使用 TOP 条件时,估计的行数总是非常接近于使用的数字对于 TOP 运营商给我一个完全错误的数字。知道应用程序表上的InterviewerID 的统计信息确切地知道ID 12868 行有超过3K 行,对此有什么简单的解释吗?为什么告诉我 13.83?

使用的版本:Microsoft SQL Server 2008 R2 (SP3) - 10.50.6000.34 (X64)

谢谢你们!

我怎么称呼SP?EXEC agy.sp_searchTest3 @interviewerId = 12868,@searchTerm = 'aar'

错误的行数

导致问题的查询:

ALTER PROCEDURE [agy].[sp_searchTest3] (
    @interviewerId INT
    ,@searchTerm VARCHAR(50) = NULL
    ,@searchApplicationId INT = NULL
    )
AS
BEGIN
    IF @searchApplicationId IS NOT NULL
        SELECT TOP 10 u.userId
            ,u.firstName + ' ' + u.lastName AS 'fullname'
            ,app.applicationId
            ,u.loginId AS email
            ,adi.URI AS imageurl
        FROM [app].[application] AS app
        INNER JOIN [app].[applicant] AS a ON a.applicantId …
Run Code Online (Sandbox Code Playgroud)

sql-server index-statistics

3
推荐指数
1
解决办法
65
查看次数