代码之家  ›  专栏  ›  技术社区  ›  tucaz

比SQL Server中的前1快前2?

  •  4
  • tucaz  · 技术社区  · 15 年前

    我们在SQL Server 2005数据库中有一个表的行数为+-500k,其中一列有全文索引。

    我们做了一些测试,发现选择前1个…其中contains(fullttextcolumn,'anyvalue')的返回时间超过两分钟。但是相同的选择,但是用前2而不是1在几秒钟内返回。

    知道为什么会这样吗?

    谢谢!

    编辑:有关问题的更多信息。在前1个查询计划SQL中使用远程扫描,而在前2个查询计划中使用索引查找。很奇怪。

    编辑2:这两个都是来自SQL的执行计划:

    前1名

    StmtText
    --------------------------------------------------------------------------------------------------------------------------------------------------
      |--Top(TOP EXPRESSION:((1)))
           |--Nested Loops(Left Semi Join, WHERE:([ECRReload].[dbo].[TECR_PRODUTO_COMPLETO_VENDAVEIS].[idProduto] = [Full-text Search Engine].[KEY]))
                |--Index Scan(OBJECT:([ECRReload].[dbo].[TECR_PRODUTO_COMPLETO_VENDAVEIS].[ix_tecr_produto_completo_vendaveis01]))
                |--Remote Scan(OBJECT:(CONTAINS))
    

    前2名

    StmtText
    -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
      |--Top(TOP EXPRESSION:((2)))
           |--Nested Loops(Inner Join, OUTER REFERENCES:([Full-text Search Engine].[KEY]))
                |--Remote Scan(OBJECT:(CONTAINS))
                |--Index Seek(OBJECT:([ECRReload].[dbo].[TECR_PRODUTO_COMPLETO_VENDAVEIS].[ix_tecr_produto_completo_vendaveis01]), SEEK:([ECRReload].[dbo].[TECR_PRODUTO_COMPLETO_VENDAVEIS].[idProduto]=[Full-text Search Engine].[KEY]) ORDERED FORWARD)
    
    1 回复  |  直到 14 年前
        1
  •  0
  •   tucaz    14 年前

    我不能百分之百地肯定这是否是固定的,但似乎是固定的。昨晚,我们的DBA重新构建了全文目录并重新组织,它开始工作。两个查询现在都在不到一秒钟的时间内运行。

    我不能解释为什么,但它起作用了。