0

奇妙な mysql クエリ速度の問題があり、頭を包み込もうとしています。私は mysql データベースをあるサーバーから別のサーバーに移動していましたが、はるかに堅牢であるはずのサーバーは、元のサーバーよりも特定の mysql クエリの実行がほぼ 4 倍遅くなりました。数日間のデバッグの後、ストアド プロシージャの where 句で変数がどのように使用されているかによって、速度に大きな違いがあることがわかりました。ここではいくつかの例を示します。

速い:

set @s = Concat('delete from visitids where VisitID=''',xVisitID,''' and OrgCode=''',xOrgCode,'''');
PREPARE stmt FROM @s;
EXECUTE stmt;

スロー:

delete from visitids where VisitID=xVisitID and OrgCode=xOrgCode;

スロー:

set @s = Concat('delete from visitids where VisitID=xVisitID and OrgCode=xOrgCode');
    PREPARE stmt FROM @s;
    EXECUTE stmt;

最初の例は、次の 2 つの例よりも約 5 倍高速です。もう1つの奇妙なことは、サーバーとおそらくmysqlのバージョンに依存することです。あるサーバーでは where 句で変数がどのように使用されても問題ありませんが、別のサーバーでは問題になります。何か不足していますか?where句に変数を含む単純なSQLステートメントが、文字列から構築されて準備/実行されたSQLクエリを使用したステートメントよりも大幅に遅くなるのはなぜですか?

4

1 に答える 1