2012-08-28 43 views
1

我有一個問題,因爲我想在MySQL例如使用方法:過程動態SQL

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; 

現在我不知道什麼時候使用這個過程動作會更快添加記錄?

回答

1

我就在MySQL或其他程序的SQL代碼專家,但我預計會有這兩個方法之間的表現非常小的差異(假設分數過程僅創造了一次)。

我只想說的是,PREPARE語句中的很多值能夠重複使用具有不同參數的準備好的查詢,並且不會產生重新處理SQL語句的代價。既然你沒有這樣做(你沒有使用參數化,只是立即銷燬準備好的查詢),使用PREPARE有什麼意義? (當然,我可能只是展示我的無知,假設你可以執行查詢一些其他的方式比使用PREPARE和從過程內部EXECUTE!)