奇妙な 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クエリを使用したステートメントよりも大幅に遅くなるのはなぜですか?