1

mysql の例で手順を使用したいので、質問があります。

DELIMITER $$

CREATE PROCEDURE `scoreS`()
BEGIN
         PREPARE stmt FROM @scoreS;
           EXECUTE stmt;
           DEALLOCATE PREPARE stmt;
END

この手順を使用したサンプルコード:

  SET @results2 = 0;
    SET @scoreS = CONCAT("SELECT CommentsId INTO @results2 FROM `",tableName,"`  WHERE CRC32 = ",Crc32," ORDER BY CommentsId DESC LIMIT 1");
    CALL scoreS();

代わりにこの手順を使用したい:

SET @results2 = 0;
           SET @scoreS = CONCAT("SELECT CommentsId INTO @results2 FROM `",tableName,"` WHERE CRC32 = ",Crc32," ORDER BY CommentsId DESC LIMIT 1");
           PREPARE stmt FROM @scoreS;
           EXECUTE stmt;
           DEALLOCATE PREPARE stmt;

そして今、このプロシージャアクションをいつ使用するとレコードの追加が速くなるかわからない??

4

1 に答える 1

1

私は MySQL またはその他の手続き型 SQL コードの専門家ではありませんが、これら 2 つのアプローチの間でパフォーマンスにほとんど違いはないと思います (scoreS プロシージャが 1 回だけ作成されると仮定して)。

ただし、PREPARE ステートメントの多くの価値は、準備されたクエリをさまざまなパラメーターで再利用でき、SQL ステートメントを再処理するコストがかからないことにあるということです。これを行っていないので (パラメータ化を使用しておらず、準備されたクエリをすぐに破棄しているだけです)、PREPARE を使用する意味はありますか? (もちろん、プロシージャ内から PREPARE と EXECUTE を使用する以外の方法でクエリを実行できると仮定して、私の無知を示​​しているだけかもしれません!)

于 2012-09-17T14:07:47.297 に答える