2012-03-16 2 views
1

私は非常に遅く実行されている一連のT-SQLクエリを使用しています。私が疑問に思っている質問の一部は、いくつかの問題を引き起こしています。SQLの列のグループを効率的にキャストする

これは問題です。私は4つの列をnvarchar/varcharとして組み合わせる必要があります。それらの組み合わせは、別のテーブルのエントリーの(半分)ユニークなキーです(恐ろしいアイデアですが、私はそれに固執しています)。

4つの列は次のとおりです。 t_orno、t_reno、t_pono、t_srnb:インデックスのないすべてのINT列。

私はこれをやっている方法はとても似ている:

Cast(t_orno AS nvarchar(10)) + '-' + Cast(t_reno as nvarchar(10)) + 
    '-' + Cast(t_pono as nvarchar(5)) + '-' + Cast(t_srnb as nvarchar(5)) 

は、残念ながら、私は一緒にこれらの列をマージすることでこだわっています。これを行うより良い方法はありますか?クエリはより効率的である必要があり、4つすべてを個別にキャスティングするよりも良い方法が必要ですか?

は想定:データベースが完全に不変であること - 悲しげにそれはある...(それに取得する必要はありません。)あなたの助けを

感謝を。

EDIT:要求ごととして、表の詳細は:

一つだけのインデックスが含まれているから照会されている両方のテーブルには、それがPK列です。これらのテーブルでは何も追加/変更できないことに注意してください。

結合されるテーブルには、次の4つの列の組み合わせが含まれます。 BaanID> nvarchar、インデックスなし。

+0

問題のテーブルのデータ構造(インデックスを含む)と、それらを結合するために使用しているクエリを含めることができますか? –

+0

@ MarkBannisterよく複雑なCTEが含まれている改善すべき約5種類のクエリがあります。それらを提供し、何が起こっているのかを説明することは非常に難しいでしょう。これが私がクエリのこの側面に焦点を当てた理由です。私はより多くの情報を追加しようとします。 – ImGreg

+0

@ MarkBannister他に関連する情報が含まれているかどうか不明です。興味のあるものがあれば教えてください。 – ImGreg

答えて

2

「 - 」文字の「別のテーブルのエントリを分割し、それぞれをintにキャストする」という逆の操作を試みましたか?パフォーマンスが向上する可能性がありますか?

+0

興味深い。私はあなたの思考@BarryKayeが好きです。スプリットや役に立つリンクの基本的な例を教えてください。 – ImGreg

+1

@ImGreg:エントリのフォーマットの複雑さによっては、一連の['SUBSTRING()'](http://msdn.microsoft.com/en-us/library/ms187748.aspx "SUBSTRING(Transact-SQL)")は固定引数を使用して整数部分を切り捨てるか、['CHARINDEX()'関数を追加使用する必要があります。http://msdn.microsoft.com/en-us/ /library/ms186323.aspx "CHARINDEX(Transact-SQL)")を使用して、エントリ内の数値コンポーネントの正しい位置を検索します。 (おそらく、文字列内の '' - ''を探し、それらの間の部分文字列の長さを計算するでしょう)。 –

1

私は永続化されたビューを使用してインデックスを作成しようとします。ここであなたを助けるかもしれない記事はあります:http://technet.microsoft.com/en-us/library/cc917715.aspx

または、t_ *列を含むテーブルに計算列を追加し、この列にインデックスを付けることができます。

+0

非常に大きなデータベースの@Danでは、これらの索引付けされたビューは実際的ですか?これらのキー4列を含む表は約4Million行で、1日約50kまで拡張されます。 – ImGreg

+0

プロジェクトについても同様の数字があり、SQL Server 2008 R2 Standardはクエリをうまく処理しました。私の場合は、データベースのバックアップを使用してテスト環境を作成し、挿入/更新/削除/選択操作のパフォーマンスをチェックします。 – Dan

+0

優れています。私はそれらを改善するために取り組んできましたが、データベースの設定が貧弱なために挑戦しました。まだクエリのパフォーマンスについて十分に学んでいない。 *作業中* – ImGreg

0

私は、これは重要なポイントであると信じて:あなたは、比較的小さなテーブルを扱っている場合を除きBaanID> nvarchar型、インデックスなし

:接合されている表は、これらの4つの列の組み合わせが含まれてい

索引付けされていない列で2つの表を結合すると、コストがかかる可能性があります。

関連する問題