2010-02-02 87 views
4

我們在Sql Server 2005數據庫中有一個包含+ - 500k行的表,其中一列具有全文索引。TOP 2比Sql Server中的TOP 1更快?

我們正在做一些測試,發現SELECT TOP 1 ... WHERE CONTAINS(fullTextColumn,'anyValue')花了兩分多鐘才返回。然而,同樣的選擇,但與TOP 2,而不是1在幾秒鐘內返回。

關於爲什麼發生這種情況的任何想法?

謝謝!

編輯:有關該問題的更多信息。在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) 
+6

您是否多次運行測試?否則,結果將簡單地從第一個查詢中緩存。 – Guffa 2010-02-02 11:46:19

+1

SQL Server緩存結果,這樣下面的查詢通常要快得多,這可以解釋你的結果。 – dbemerlin 2010-02-02 11:49:59

+0

其實沒有。我們跑了5分鐘,停了下來。 – tucaz 2010-02-02 11:52:46

回答

0

我可不是100%肯定,如果我能說這是固定的,但似乎是這樣。昨晚我們的DBA重新構建了FullText目錄並重新組織,並開始工作。兩個查詢現在都運行不到一秒鐘。

我無法解釋爲什麼,但它工作。