sql >> データベース >  >> RDS >> Mysql

mysqlストアドプロシージャは、標準のクエリより20倍遅い

    推測:

    クエリを手動で実行する場合、式WHERE ('test' IS NULL or COL1 = 'test') クエリの解析時に最適化できます。パーサーは、文字列'test'を確認できます。 nullではないため、テストをWHERE COL1 = 'test'に変換します。 。また、COL1にインデックスがある場合 これが使用されます。

    ただし、ストアドプロシージャを作成する場合、プロシージャの作成時に解析が行われます。その時、それは何の@paramを知りません テーブルの順次スキャンとしてクエリを実装する必要があります。

    手順を次のように変更してみてください:

    IF @param IS NULL
    THEN BEGIN
      SELECT * FROM table1
      UNION ALL
      SELECT * FROM table2
      ...
    END;
    ELSE BEGIN
      SELECT * FROM table1 WHERE col1 = @param
      UNION ALL
      SELECT * FROM table2 WHERE col1 = @param
      ...
    END;
    END IF;
    

    MySQLのストアドプロシージャの経験があまりないので、それが正しい構文かどうかはわかりません。



    1. LIKEフィルターでアンダースコア文字を使用するとすべての結果が得られるのはなぜですか?

    2. どちらの時系列データベースが優れているか:TimescaleDBとInfluxDB

    3. 本番PostgreSQLデータベースの管理を容易にする

    4. 時間のない日付のみを知ってテーブルから選択する(ORACLE)