SQL用户自定义函数如何使用表的索引

8312008 2003-10-15 04:45:09
有如下表(示例),在代码字段上建有索引
代码  名称
0001  AAAAA 
0002  BBBBB
0003  CCCCC
0004  DDDDD
0005  EEEEE
0006  FFFFF
根据代码查出名称
一般操作为:select 名称 from 示例 where 代码='0001'
现建有一自定义函数完成同样功能
CREATE FUNCTION Fu_zzjg (@dm char(4))
RETURNS varchar(20)
AS
BEGIN
declare @strKey varchar(20)
set @strKey=''
select @strKey=tt.名称 from
(select 名称 from 示例 where 代码=@dm) as tt
RETURN (@strKey)
END
但是发现在自定义函数中好象没有用上索引?
请教大家有关在自定义函数中使用的问题?


...全文
216 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
8312008 2003-10-17
  • 打赏
  • 举报
回复
问题是有时不用自定义函数不行。
所以我想详细了解这方面的情况,以免造成性能上的问题

再放一天结贴
8312008 2003-10-16
  • 打赏
  • 举报
回复
现在就是这个问题搞不太清楚
查看执行计划中调用函数没有用到索引,而是“Constant Scan”(不清楚具体含义和差别)

因为在即使使用系统函数时,SQL也存在因为无法判断索引而采取全表扫描的方式
所以想知道在自定义函数中应如何保证能让SQL使用索引?
或者是只需要按正常写好语句,由SQL自行判断?
---涛声依旧--- 2003-10-16
  • 打赏
  • 举报
回复
我也不是專家﹐但知道盡量少用自定義函數,除非迫不得已;
在表的索引建得合理的前提下﹐自定义函数按正常写好语句,由SQL自行判断即可,無須考慮应如何保证能让SQL使用索引
wuxinhua_ok 2003-10-16
  • 打赏
  • 举报
回复
我不是专家!
但是,我知道SQL Server 会判断要查询的表或视图是否建立了索引来优化的查询的.
这一点可以肯定。
当你要查询的是大量数据(如月报表)的时候,是否建立了索引,或索引建立得好不好,
效果会相当明显。这就是我的判断。
如果表的数据量不大,是很难判断出来的。
8312008 2003-10-16
  • 打赏
  • 举报
回复
大家帮忙呀,什么时候才有专家出现呀?:)
8312008 2003-10-16
  • 打赏
  • 举报
回复
没人能详细解释一下吗?:(
分不够可以再加!:)
CrazyFor 2003-10-15
  • 打赏
  • 举报
回复
那你是怎么知道(select 名称 from 示例 where 代码=@dm)这句没用到索引了?

SQL语句会自己跟据索引来优化的执行的.
8312008 2003-10-15
  • 打赏
  • 举报
回复
请大家关注一下:)
8312008 2003-10-15
  • 打赏
  • 举报
回复
呵呵,不好意思,是我打错了:(
这只是个示例,实际的比这复杂多了
我的意思是想搞清楚在自定义函数中的查询如何才能用上表的索引
CrazyFor 2003-10-15
  • 打赏
  • 举报
回复
你干嘛要去多套一层??想不通!!!
pengdali 2003-10-15
  • 打赏
  • 举报
回复
CREATE FUNCTION Fu_zzjg (@dm char(4))
RETURNS varchar(20)
AS
BEGIN
declare @strKey varchar(20)
set @strKey=''
select @strKey=名称 from 示例 where 代码=@dm
RETURN (@strKey)
END

34,575

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧