Mysql

返回相同值的 DETERMINISTIC NO SQL 函式是否始終是在 MySQL 中用作常量的好選擇?

  • November 27, 2015

MySQL 不支持聲明可以在許多儲存過程之間使用的常量。對我來說,似乎可以使用確定性 no sql 函式作為常量的替代方案。範例:我想使用一個名為“OPERATION_TYPE_ABORT”的常量,其值為“ABORT”。所以我認為我可以使用的替代方法是定義一個如下所示的儲存函式。

DROP FUNCTION IF EXISTS OPERATION_TYPE_ABORT;
DELIMITER //
CREATE FUNCTION OPERATION_TYPE_ABORT() RETURNS VARCHAR(6) 
DETERMINISTIC NO SQL
BEGIN
   RETURN ("ABORT");
END//
DELIMITER ;

Output:

mysql> select "test" FROM DUAL WHERE "ABORT" = OPERATION_TYPE_ABORT();
+------+
| test |
+------+
| test |
+------+
1 row in set (0.00 sec)

mysql> select "test" FROM DUAL WHERE "ABORT2" = OPERATION_TYPE_ABORT();
Empty set (0.00 sec)

您認為這種方法有什麼缺點或問題嗎?(例如,重要的性能問題等)。PS:使用這些常量的查詢在查詢中使用的是小型表。MySQL 5.6 版

謝謝

我會說是的,這是一個很好的技術。

當聲明為DETERMINISTICand的儲存函式沒有輸入參數NO SQL時,優化器會做正確的事情——它執行一次函式,並在計劃查詢時將函式的結果解析為內部常量,因此適用於正如預期的那樣,使用與函式結果進行比較的列。

使用這種技術的行為和性能應該(出於所有實際目的)與查詢實際包含文字常量時沒有什麼不同。

引用自:https://dba.stackexchange.com/questions/122250