关于自定义函数导致SQL查询过慢的解决方案

在做报表的过程中,有一张报表是要查询对应币种的汇率,而汇率在另外一张表中,而查询汇率的条件是根据报表的统计日期(页面传入的参数),去汇率表中查询该统计日期的上一个月的汇率,如果没有上个月的汇率,则查询最新的对应币种的汇率,因此,自定义了一个获取汇率的函数,放在SQL中,其传入的参数为对应的币种代码和统计日期,这样,此函数就没有办法建立函数索引,这样导致查询结果很慢,150万的数据导出要10多分钟。

后来做了改进,由于统计日期确定后,其对应的汇率也就确定了,因此另建一张汇率表,其存的汇率就是我们想要的汇率,我们在页面查询的时候执行存储过程,将我们想要币种和对应的汇率存入该表即可。

我们在SQL语句中只需查询该表中的对应币种的汇率即可,而不再需要调用获取汇率的函数了,这样速度就快了很多,时间缩短了将近一半。

版权声明:本文为博主原创文章,未经博主允许不得转载。

时间: 2024-10-24 14:03:57

关于自定义函数导致SQL查询过慢的解决方案的相关文章

Report Studio值提示通过prompt宏函数给sql查询传参

场景:当我们在DW中新建了一个表,但是在FM中没有创建模型,想针对这个表直接做一个报表,那么就需要在reportstudio中直接用sql来查询,为了追求查询速度,我们可以把页面用户选择的条件直接传给sql. 如下图:上面是省份对应key值为1-2-3-4-5,下面是商品类型对应key值为1-2,省份选择1,5类型选择1则出现想要的数据 实现步骤: 1:从工具箱拖一个sql,每个sql会绑定一个查询接收sql的查询结果,如下图 2:指定sql引用的数据源,数据源已经在CognosConnecti

13、SQL Server 自定义函数

SQL Server 自定义函数 在SQL Server中不仅可以使用系统函数(如:聚合函数,字符串函数,时间日期函数等)还可以根据需要自定义函数. 自定义函数分为标量值函数和表值函数. 其中,标量值函数用于返回单个值,而表值函数用于返回一个结果集. 函数参数 参数可以是常量.表中的某个列.表达式或其他类型的值.在函数中有三种类型的参数. 1.输入:指必须输入一个值. 2.可选值:在执行该参数时,可以选择不输入参数. 3.默认值:函数中默认有值存在,调用时可以不指定该值. 创建标量值函数 语法:

DB 查询分析器 方便地创建DB2自定义函数

DB 查询分析器 方便地创建DB2自定义函数                           马根峰            (广东联合电子服务股份有限公司, 广州 510300) 摘要          本文详细地介绍了"万能数据库查询分析器",中文版本<DB 查询分析器>.英文版本<DB Query Analyzer>6.03 来方便地创建DB2函数.创建DB2存贮过程与此相同,大家可以参照以下步骤.另外,本示例还适用于SQL语句要以逗号来分隔的数据库系统

转:存储过程和自定义函数的区别

首先来看一下存储过程和自定义函数的概念 一. 什么是存储过程? 存储过程可以使得对数据库的管理.以及显示关于数据库及其用户信息的工作容易得多.存储过程是SQL 语句和可选控制流语句的预编译集合,以一个名称存储并作为一个单元处理. 存储过程存储在数据库内,可由应用程序通过一个调用执行,而且允许用户声明变量.有条件执行以及其它强大的编程功能. 存储过程可包含程序流.逻辑以及对数据库的查询.它们可以接受参数.输出参数. 返回单个或多个结果集以及返回值. 可以出于任何使用SQL 语句的目的来使用存储过程

存储过程和自定义函数的区别

1: 1)存储过程,功能强大,可以执行包括修改表等一系列数据库操作,也可以创建为 SQL Server 启动时自动运行的存储过程. 自定义函数,用户定义函数不能用于执行一组修改全局数据库状态的操作. 2)存储过程,可以使用非确定函数. 自定义函数,不允许在用户定义函数主体中内置非确定函数. 3)存储过程,主要是返回一个int状态结果,也可返回记录集. 自定义函数,可以返回表变量. 关于这个,很容易糊涂.存储过程,可以使用这样的形式来返回N多的结果: create procedure sp1  a

自定义函数与储存过程的区别

存储过程和自定义函数的区别 Difference between Procedure and User Defined Function 首先来看一下存储过程和自定义函数的概念 一. 什么是存储过程? 存储过程可以使得对数据库的管理.以及显示关于数据库及其用户信息的工作容易得 多.存储过程是 SQL 语句和可选控制流语句的预编译集合,以一个名称存储并作为一个单 元处理. 存储过程存储在数据库内, 可由应用程序通过一个调用执行, 而且允许用户声明变 量.有条件执行以及其它强大的编程功能. 存储过程

MYSQL自定义函数实现表中递归层次的展现

1.现在以菜单表为例,在数据库中创建表test_menu. 2.在表中创建一些实例数据 现在的菜单层次为cd_1与cd_2为一级菜单,cd_1下分为cd_1_1与cd_1_2两个二级菜单,cd_1_1下有个三级菜单cd_1_1_1,目录结构如下 cd_1 cd_1_1 cd_1_1_1 cd_1_2 cd_2 3.创建自定义函数 4.查询菜单层次 在此,菜单的各层次就很清晰的展现出来了.

SQL Server CLR 使用 C# 自定义函数

原文:SQL Server CLR 使用 C# 自定义函数 一.简介 Microsoft SQL Server 2005之后,实现了对 Microsoft .NET Framework 的公共语言运行时(CLR)的集成.CLR 集成使得现在可以使用 .NET Framework 语言编写代码,从而能够在 SQL Server 上运行,现在就可以通过 C# 来编写 SQL Server 自定义函数.存储过程.触发器等.我最初的目的是因为在 SQL Server 数据库中遇到数字的十进制与十六进制的

SQL 自定义函数(Function)——参数默认值

sql server 自定义函数分为三种类型:标量函数(Scalar Function).内嵌表值函数(Inline Function).多声明表值函数(Multi-Statement Function) 标量函数:标量函数是对单一值操作,返回单一值. 内嵌表值函数:内嵌表值函数的功能相当于一个参数化的视图.它返回的是一个表,内联表值型函数没有由BEGIN-END 语句括起来的函数体. 多声明表值函数:它的返回值是一个表,但它和标量型函数一样有一个用BEGIN-END 语句括起来的函数体,返回值