2013-06-04 15 views
5

私は実行するために10秒かかっている(下記)を実行しようとしたSQLクエリを持っている、そしてそれは、本番環境にあったので、私はちょうどに行く何のSQLのロックがないことを確認することを停止しこれらのクエリの1つを高速化するには?

SELECT TOP 1000000 * 
    FROM Table T 
    Where CONVERT(nvarchar(max), T.Data) like '%SearchPhrase%' --T.Data is initially XML 

今私が作成時間(私はインデックスだとは思わない)で注文を追加すると、2秒かかるので完了です。

SELECT TOP 1000000 * 
    FROM Table T 
    Where CONVERT(nvarchar(max), T.Data) like '%SearchPhrase%' --T.Data is initially XML 
    order by T.CreatedOn asc 

今キッカーは約行がさえTOP 1000000と、それはそれはまだ、すべての行を起こっている行に短い停止されていないことを私に語った、返されるということです。

SQLサーバーの仕組みとクエリ解析の仕組みを基本的に理解していますが、このような状況で注文がどうして早くなるのかがわかりません。

サーバーであることの実行には、SQL Serverが並列プランを使用するため、追加のソート操作は、この場合には明らかに十分であるSQLサーバー2008 R2

+1

それぞれのクエリから 'EXPLAIN PLAN'を見て、その違いがどういうものかを見てください。 –

+1

2つの結果は常に10秒と2秒で返されますか? – Kane

+0

@ケーンそれはそこそこです。私はサーバーにリソースをロックアウトさせたくないので、実際に最初のものを終了させない** EDIT **最初のものを完全に実行させ、20秒かかった(2回続けて20回) –

答えて

5

です。高速一つは仕事が24件のスレッドだけではなく、単一のものによって行われていることを意味する24DegreeOfParallelismを有する一方

ORDER BYせず)より遅い一方がシリアル平面図です。

これは、並べ替えに必要な追加作業にもかかわらず、大幅に短縮された経過時間を説明しています。

関連する問題