簡體   English   中英

MySQL-快速查詢但存儲過程緩慢

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM