[英]MySQL - Fast query but slow Stored Procedures
我知道這個問題在這里已經討論了很多。 但是我有一個特殊的情況,當我需要傳遞參數列表(逗號分隔)時,這會阻止我聲明局部變量並將其用於輸入參數。
如以上討論所指出的,建議聲明一個局部變量並將參數分配給該變量。 但是,如果我的參數是Text
類型並且可以是逗號分隔的列表,該怎么辦?
例如 -
CREATE DEFINER=`Admin`@`%` PROCEDURE `MyReport`(
p_myparameter_HK Text
)
BEGIN
SELECT
*
FROM MyTable
WHERE
(find_in_set(MyTable.column_HK, p_myparameter_HK) <> 0 OR MyTable.column_HK IS NULL)
;
END
性能:
詢問
如果我只是運行查詢-300毫秒
儲存程序
CALL MyReport('0000_abcd_fake_000')
此過程不斷運行。
我的問題是,如何禁用parameter sniffling
find_in_set
並使用局部變量而不是find_in_set
來匹配查詢性能。
我需要將任意的事物列表傳遞給存儲過程的時間是這樣的:
CREATE
(或已經具有)用於傳遞信息的TABLE
。調用方和過程都知道過程的名稱。 (或者可以將其傳遞,但是添加一些混亂的“准備執行”。) INSERT
。 ( INSERT INTO tbl (a,b) VALUES (...), (..), ...;
) JOINs
或有效使用表的任何操作。 就我而言,付出額外的努力是值得的。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.