首页 > 解决方案 > 从 MySQL 中调用函数

问题描述

在视图的 where 子句中调用函数时,MySQL 是具体化视图然后应用该函数还是调用该函数然后将其添加到视图中?

在应用程序中,我正在处理对 API 的每次调用都会设置一个 MySQL 变量 CustomerId。然后它调用视图上的查询。在这个视图中,where 子句中有一个函数调用,它根据 where 变量过滤视图。

示例函数

create function PARAM_CUSTOMERID() returns int
BEGIN
RETURN @Param_CustomerId;
END;

示例视图

create view TransactionPaymentSummary
select t.Id, 
sum(f.TotalFee) as TotalFees,
sum(p.TotalPayment) as TotalPayment,
t.CustomerId
from Transactions t
left join Fees_Summary f on t.Id = f.TransactionId
left join Payments_Summary p on t.Id = p.TransactionId
where t.CustomerId = PARAM_CUSTOMERID();

当我在有问题的视图上运行解释计划时,它似乎在执行类似的操作时仍然运行全表扫描

explain extended select *
from TransactionPaymentSummary 

但是当我使用 where 子句对类似查询执行解释计划时,它似乎执行了 ref 类型查询

explain extended select *
from TransactionPaymentSummary 
where CustomerId = 50;

标签: mysql

解决方案


推荐阅读