私は、tblFilterSum
と呼ばれるtable
を持ち、そのprimary key
はSumID
です。別のtable
はtblFilterProd
であり、そのprimary key
はProdID
です。両者の間には、table
tblFilterProdsInSum
で表されるn:m関係があり、2次元は(SumID, ProdID)
です。残念ながら、SumID
とProdID
したがって、私はSumID
foreign key
、references tblFilterSum(SumID)
別foreign key
ProdID
、references
tblFilterProd(ProdID)
を作るために、スキーマを変更し、ないforeign keys
ました。 SumID
の場合はtblFilterProdsInSum
に降順のインデックスを追加し、ProdID
の場合は降順のインデックスを追加しました。今、私は選択の速度を測定しようとすると、私は次のスクリプトを書いた:なぜavgはエラーをスローしますか?
declare @start datetime;
set @start = CURRENT_TIMESTAMP;
declare @index int;
set @index = 0;
while (@index < 1000)
begin
select avg(tblFilterProdsInSum.SumID + tblFilterProdsInSum.ProdID)
from tblFilterSum
join tblFilterProdsInSum
on tblFilterSum.SumID = tblFilterProdsInSum.SumID
join tblFilterProd
on tblFilterProdsInSum.ProdID = tblFilterProd.ProdID
set @index = @index + 1;
end
declare @end datetime;
set @end = CURRENT_TIMESTAMP;
select @start, @end, @end - @start;
これは、次のエラーがスローされます。
両方Arithmetic overflow error converting expression to data type int.
SumID
とProdID
はint
タイプです。このエラーの原因は何か不思議です。 SQL Serverはすべての値を追加してからcount
で区切っていますか?
を避けるために、例外に基づいてSumIDとPRODIDを加算した結果がintデータ型(HTTPSの範囲外である可能性があり:// msdn.microsoft.com/en-us/library/ms187745.aspx)。では、この場合のProdIDのSumIDの値は何ですか? –
大きな整数です。 –