私はクエリをスピードアップする効果的な方法を探しています。状況を説明しましょう。SQL Server - VARCHARとINTの間で結合するより良い方法
毎晩、さまざまなベンダーのレポートをテーブルにダンプします。これらは多くの列ですが、これらの列はクエリに参加するために使用する主な列です。
tblVendorShippingInfo(時にはQtyShippedでvarchar型の文字が含まれている報告以来、以下のすべての論文の列がVARCHARであることに注意してください)
PONum vSKU vSKUDesc ShipQuantity
P111111 A Test1 5
P111111 A Test1 2
P111111 B Test3 5
P100002 C Test4 6
P222222 D Test5 7
P222222 D Test5 6
P222222 E Test6 7
PABC123 F Test7 8
XYZ123 G Test8 8
GHEHEH H Test9 8
tblPODetail - 私たちのテーブル発注のため。 POIDとDistyShippedQtyは整数であることに注意してください。 POIDは6桁の数字です。
POID SKU SKUDesc DistyShippedQty
111111 A Test1
111111 B Test3
100002 C Test4
222222 D Test5
222222 E Test6
私はDistyShippedQtyを取得し、更新するには、以下のようなクエリを使用している場合、それは動作しますが、遅い変換... VARCHARマッチング...等ため。
select POID, SKU
, (
SELECT SUM(ShipQuantity) AS ShipQuantity
FROM tblVendorShippingInfo
WHERE substring(PONum, 2, 6) = Convert(varchar(10), pod.POID)
AND vSKU = pod.SKU
) AS QtyCount
FROM tblPODetail pod
だから、私はちょうど、唯一の6桁が(P後、または任意の文字)第二の位置で始まるれるPONumを持ってtblVendorShippingInfoテーブル内のレコードをフィルタする(文字を持つすべてのレコードを無視するより良い方法を探しています例:PABC123、XYZ123、GHEHEH)、tblPODetailテーブルとの結合に使用できるようにインデックスを付けます。
フィルタを使用してインデックス付きビューを作成しようとしましたが、このビューでクエリを実行すると失敗しました。
Alter VIEW vw_tblVendorShippingInfo WITH SCHEMABINDING AS
select dfID, substring(PONum,2, 6) AS POID
, vSKU, ShipQuantity
FROM dbo.tblVendorShippingInfo
WHERE 1 = 1
AND PONum like '%[^0-9]%'
推奨事項はあります。
あなたは 'WHERE'節の変更としてこれを取り除くことができ、特に遅くなることはありません:' WHERE PONum LIKE CONCAT( '_'、pod.POID) '。この方法でPONumの部分文字列に参加する必要はなく、PONumとPOIDにあるインデックスを使用できるはずです。 – ZLK
私はそれを試して、エラーが発生しました "'CONCAT'は認識された組み込み関数名ではありません。私はSQL Server 2008 – Milacay
Hmを使用しています。 'LIKE '_' + CAST(pod.POID AS VARCHAR(10))'はCONCATと同じように動作します。問題は変換ではなく、PONumの部分文字列に結合しているという事実です。それでもまだ遅い場合は、ビューの解決策が最適かもしれません。 – ZLK