ストアドプロシージャ。 誰が速い

私たちは何について話しているのですか



選択に影響する要因の1つとして、プロジェクトに1つまたは別のDBMSを選択すること、ストアドプロシージャと関数の言語の存在、その機能、および利便性が考慮されます。



速度はどうですか? クエリプラン、オプティマイザー、インデックスの存在などを担当するDBMSカーネルがサンプリングレートを担当していることは明らかです。 しかし、これはそれについてではありません。

最新のDBMSのストアドプロシージャ言語には、古典的なプログラミング言語に固有の多くのプロパティがあります。型と変数の存在、ループです。 彼らのスピードについてお話します。



3つの異なるDBMSでPiの数を計算する方法に興味がある場合、または最初の1年間のコンピューターサイエンスコースを思い出す場合は、catをご覧ください。





ちょっとした数学



研究所の若さ、シリーズ理論を思い出して、数学的な依存関係を使用して計算問題をプログラムすることに決めました。









実際には、逆正接を計算します。計算の精度は10 -7です。



火の鳥


create or alter procedure ARCTG (X double precision) returns (S double precision, I integer) as declare variable U double precision; begin S = X; U = X; I = 3; while (abs(U) >= 0.0000001) do begin U = -U*X*X*(I-2)/I; S = S + U; I = I + 2; end suspend; end
      
      







ここで、Sは逆正接の値、Iは反復回数×2(概算)です。

他のシステムの手順では、反復回数がどこでも同じになるため、変数Iは導出されませんでした。

手順をプログラミングした後、

 select 4*S,I from arctg(1)
      
      





数値Piとカウンターの値I = 10 000 003を取得し、必要な精度を達成するには約500万サイクルが必要であると結論付けます。 時間-13.5秒



MySQL


 CREATE DEFINER = 'root'@'localhost' FUNCTION ARCTG(X DOUBLE) RETURNS DOUBLE BEGIN DECLARE U DOUBLE DEFAULT X; DECLARE S DOUBLE DEFAULT X; DECLARE I INT DEFAULT 3; WHILE (abs(U) >= 0.0000001) DO SET U = -U*X*X*(I-2)/I; SET S = S + U; SET I = I + 2; END WHILE; RETURN S; END
      
      





結果-42.5秒



MSQL


 CREATE FUNCTION [ARCTG] (@X real=1) RETURNS real WITH EXECUTE AS CALLER AS BEGIN DECLARE @S AS REAL DECLARE @U AS REAL DECLARE @I AS INT SET @S = @X SET @U = @X SET @I = 3 WHILE (abs(@U) >= 0.0000001) BEGIN SET @U = -@U*@X*@X*(@I-2)/@I SET @S = @S + @U SET @I = @I + 2 END RETURN @S; END
      
      





結果-12秒



まとめ



1. MsSQL 2005-12秒

2. Firebird 2.5-13.5秒

3. MySQL 5.1-42.5秒



すべてのテストは、Athlon 3200+マシン、OS-Windows XPで実行されました。

MySQLの結果は驚きました。 おそらく問題は、彼がVertrigoキットを歩いていて、最適に構成されていないことでした。 誰かが同様のテストを実施する場合、知ることは興味深いでしょう。

さて、ついに


Cコード時間(Borlandコンパイラ、コードは提供しません)は約200ティック(GetTickCount関数)でした。 約0.2秒 その後、トピックを「異常なプログラミング」に移すというアイデアがありましたが、それでも次の矛盾する結論(好きな人)でここに投稿しました。

1. DBMSメカニズムを使用して大規模で複雑な計算を実行する必要はありませんが、DBMSの外部でロジックを使用できます。

または

2. DBMSエンジンには、努力が必要なものがあります。



All Articles