我们在 Sql Server 2005 数据库中有一个表格,其中一列具有全文索引,行数约为 500k。我们进行了一些测试,发现 SELECT TOP 1 ... WHERE CONTAINS(fullTextColumn, 'anyValue') 花费超过两分钟才返回结果。然而,将 TOP 1 改成 TOP 2 后,查询几秒钟就能返回结果。请问这是为什么?谢谢!
编辑:关于问题的更多信息。在 TOP 1 查询计划中,Sql 使用远程扫描,而在 TOP 2 中使用索引搜索。非常奇怪。
编辑 2:以下是 Sql 的执行计划:
TOP 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))
TOP 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)
编辑:关于问题的更多信息。在 TOP 1 查询计划中,Sql 使用远程扫描,而在 TOP 2 中使用索引搜索。非常奇怪。
编辑 2:以下是 Sql 的执行计划:
TOP 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))
TOP 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)
DBCC freeproccache GO DBCC dropcleanbuffers GO
- Grzegorz GierlikSET SHOWPLAN_TEXT ON \n GO \n SELECT …
。 - Quassnoi