5

実行に 10 秒かかった (以下) を実行しようとした sql クエリがあります。これは運用環境にあったため、sql ロックが行われていないことを確認するために停止しました。

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

キッカーは、約3000行しか返されないことです。これは、 を使用しても、TOP 1000000まだすべての行を通過している行が不足していないことを示しています。

SQL サーバーの仕組みとクエリの解析の仕組みについては基本的な理解がありますが、この状況で order by を使用すると高速になる理由がわかりません。

実行中のサーバーは SQL Server 2008 R2 です

4

1 に答える 1