Mysql
返回相同值的 DETERMINISTIC NO SQL 函式是否始終是在 MySQL 中用作常量的好選擇?
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 版
謝謝
我會說是的,這是一個很好的技術。
當聲明為
DETERMINISTIC
and的儲存函式沒有輸入參數NO SQL
時,優化器會做正確的事情——它執行一次函式,並在計劃查詢時將函式的結果解析為內部常量,因此適用於正如預期的那樣,使用與函式結果進行比較的列。使用這種技術的行為和性能應該(出於所有實際目的)與查詢實際包含文字常量時沒有什麼不同。