私はストアドプロシージャに郡の文字列を渡すSSRSレポートを持っています。報告書を作成しなければならなかったので、私は36桁のGUIDを郡に追加する必要がありました。私は、substring関数を使用してストアドプロシージャでGUIDを取り除く:サブストリング機能に代わるより高速な方法はありますか?
and county IN(Select substring(item, 1, LEN(item)-36) from fnsplit(@County, ',')
報告書は、REPLACE関数を超える広大な改善である、約8秒で実行されます。しかし、私はまだこれをもっと速く走らせたいと思っています。誰もがこれを行うためのより良い方法を知っていますか?テーブルにインデックスを含めることは許可されていないため、オプションではありません。
ここhttp://stackoverflow.com/questions/3828374/relative-performance-in-sqlserver-of-substring-vs-a-right-left-comboを見てみましょう。 –
サブストリングが本当に問題である場合は、かなり奇妙に聞こえます。あなたの問題を引き起こすfnsplitではないと確信していますか?実際には、文全体、クエリ計画を含める必要があります。これは関数なので、プランキャッシュからのパフォーマンス統計も確認することをお勧めします。 –
fnsplitは3つの異なる変数で実行されますが、非常に高速です。それは、それが減速した部分文字列()を追加したときだけでした。関数の実行計画を見ると、2つの表挿入に50%のコストしか表示されません。変数から統計を見る良い方法はありますか?実行計画を実行すると、変数の代わりに1つのレコードしか挿入できませんでした。 – jackstraw22