【问题标题】:using EXPLAIN for MYSQL stored procedure calls使用 EXPLAIN 进行 MYSQL 存储过程调用
【发布时间】:2011-07-20 08:43:44
【问题描述】:

如何为我的存储过程调用分析和使用 EXPLAIN? 我需要优化查询时间,但是似乎没有地方可以进行 EXPLAIN 调用 proc_name() ?

【问题讨论】:

    标签: mysql stored-procedures


    【解决方案1】:

    你可以试试

    set profiling=1;
    call proc_name();
    show profiles;
    

    【讨论】:

    • 这并没有显示执行计划,但它确实显示了过程中每个查询花费了多长时间。
    【解决方案2】:

    目前您无法解释 mysql 中的存储过程 - 但您可以这样做:

    drop procedure if exists get_user;
    delimiter #
    create procedure get_user
    (
    in p_user_id int unsigned,
    in p_explain tinyint unsigned
    )
    begin
      if (p_explain) then
        explain select * from users where user_id = p_user_id;
      end if;
      select * from users where user_id = p_user_id;
    end#
    
    delimiter ;
    
    call get_user(1,1);
    

    【讨论】:

    • 这是做什么的?
    • 如果你调用它,它确实解释了过程中的查询
    【解决方案3】:

    EXPLAIN 仅适用于 SELECT 语句,除非您使用 EXPLAIN 表名,它是 DESCRIBE 表名的别名

    【讨论】:

    • EXPLAINSELECT DELETE INSERT REPLACE UPDATE 语句一起使用,如MySQL 5.7 doc 中所述
    • @Xenos 你...看到我回答的日期了吗?
    • 是的,这就是值得一提的原因,因此其他读者是最新的,而不是坚持旧的过时答案
    猜你喜欢
    • 2016-02-18
    • 1970-01-01
    • 1970-01-01
    • 2016-08-06
    • 1970-01-01
    • 1970-01-01
    • 2016-05-03
    • 2013-05-18
    • 1970-01-01
    相关资源
    最近更新 更多