SQL语句中WHEN部分,能用索引来优化的吗?

mywisdom88 2018-01-19 11:59:55
--select datediff(mi,30,getdate()),getdate(),dateadd(mi,-10,getdate())
/*
if object_id('..f_test') is not null drop table f_test

create table f_test(
iNo int,
cName varchar(20) default '',
iLock int default 0,
dLockTime datetime default null,
cLockUser varchar(20) default ''
)
insert into f_test(iNo,cName)
select 1,'11' union all
select 2,'22' union all
select 3,'33' union all
select 4,'44'

*/
--create index f_test_iNo on f_test(iNo)
--create index f_test_cName on f_test(cName)
--create index f_test_iLock on f_test(iLock)
--create index f_test_dLockTime on f_test(dLockTime)
--create index f_test_iNo_iLock on f_test(iNo,iLock)
--create index f_test_iNo_iLock_cName on f_test(iNo,iLock,cName)

declare @iNo int,@cName varchar(20)
select @iNo=1,@cName='11'
--update f_test set iLock=1 where iNo=2
--update f_test set iLock=1,dLockTime=getdate() where iNo=3

select iNo,cName,iLock,dLockTime,cLockUser,
case when iLock=0 or (iLock>0 and (cName =@cName or dateadd(mi,-5,getdate())<dLockTime or dLockTime is null))
then 0 else 1 end as rLock
from f_test
where iNo=@iNo
上面的语句,怎么做才会优化的,上面的索引,不知道那个才会优化,WHEN部分呢?
...全文
544 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
吉普赛的歌 版主 2018-01-19
  • 打赏
  • 举报
回复
引用 3 楼 mywisdom88 的回复:
由于数据少,我也不知道时间, 我就是想知道,在 WHEN部分的,能不能利用索引,优化的.
那你这个案例就没什么意义。 CASE 部分情况应该还是可以用得到索引的。
吉普赛的歌 版主 2018-01-19
  • 打赏
  • 举报
回复
总数据量有多少?另外贴一下执行计划。
mywisdom88 2018-01-19
  • 打赏
  • 举报
回复
由于数据少,我也不知道时间, 我就是想知道,在 WHEN部分的,能不能利用索引,优化的.
mywisdom88 2018-01-19
  • 打赏
  • 举报
回复
OwenZeng_DBA 2018-01-19
  • 打赏
  • 举报
回复
执行多长时间,执行计划有吗
mywisdom88 2018-01-19
  • 打赏
  • 举报
回复
SQL的锁,我搞不懂,比如 ID,NAME..... 1,张三 2,李四 3,王五 当我在编辑 1的记录时,别人能看这条记录,但他是不能修改这条记录,(客户端在修改1记录) SQL的锁,能有这个功能?
吉普赛的歌 版主 2018-01-19
  • 打赏
  • 举报
回复
引用 6 楼 mywisdom88 的回复:
我是想,自己来锁记录, 当我想修改这条记录时,我把 iLock更新为1,同时,更换 dLockTime,cLockUser 别人能读,但他读出来的这条数据,他是不能修改的, rLock=1, 这样,我就不理他系统的锁了,当超过10分钟时,忽略 iLock=1这个条件了. 我想知道, case when 部分,会不会造成太多的开销的?
尽量不要自己 “发明” 锁, 这样效率不高, 弄得不好运行都有问题。 把SQL Server本身的锁用好就行了
OwenZeng_DBA 2018-01-19
  • 打赏
  • 举报
回复
引用 6 楼 mywisdom88 的回复:
我是想,自己来锁记录, 当我想修改这条记录时,我把 iLock更新为1,同时,更换 dLockTime,cLockUser 别人能读,但他读出来的这条数据,他是不能修改的, rLock=1, 这样,我就不理他系统的锁了,当超过10分钟时,忽略 iLock=1这个条件了. 我想知道, case when 部分,会不会造成太多的开销的?
从执行计划看到,你的主要开销是查找f_test表 ,case when 并没有造成多少开销。
mywisdom88 2018-01-19
  • 打赏
  • 举报
回复
我是想,自己来锁记录, 当我想修改这条记录时,我把 iLock更新为1,同时,更换 dLockTime,cLockUser 别人能读,但他读出来的这条数据,他是不能修改的, rLock=1, 这样,我就不理他系统的锁了,当超过10分钟时,忽略 iLock=1这个条件了. 我想知道, case when 部分,会不会造成太多的开销的?
内容概要:本文系统研究了开关频率大于谐振频率(fs>fr)工况下,移相混合控制LLC谐振变换器在低压增益区域的工作特性,深入分析其在变频与移相结合控制模式下的调制机理、工作模态划分及损耗分布规律。通过Simulink平台构建高保真仿真模型,对变换器在不同负载和输入条件下的电压增益、转换效率、关键器件电压电流应力等性能指标进行了全面仿真验证,重点探讨了其在低增益区间的软开关实现能力与效率优化潜力,旨在提升LLC变换器在宽范围输入输出应用的动态响应与能源转换效率。; 适合人群:从事电力电子变换器设计、高频电源开发及相关领域的高校研究生、科研院所研究人员及企业研发工程师,要求具备扎实的电路理论基础、电力电子技术知识以及一定的Simulink仿真能力。; 使用场景及目标:①深入理解LLC谐振变换器在fs>fr条件下采用移相混合控制的内在工作机理与模态转换过程;②掌握利用Simulink搭建复杂谐振变换器精确仿真模型的方法与技巧;③分析并优化低压增益区的增益特性与损耗构成,为设计高效率、高功率密度的软开关电源提供理论依据和数据支持; 阅读建议:建议读者结合文所述仿真模型,亲自复现仿真过程,重点观察不同控制参数(如移相比、开关频率)对电压增益曲线和关键波形的影响,并对比传统变频控制策略,深入探究混合控制在拓宽调压范围、提升轻载效率方面的优势,从而深化对现代高效谐振电源设计的理解。
内容概要:本文提出了一种基于粒子群优化算法(PSO)的配电网光伏储能双层优化配置模型,以IEEE33节点系统为标准算例,实现光伏发电单元与储能系统的协同选址与定容优化。该模型采用双层架构设计,上层以投资成本、运行经济性及网络损耗最小为目标优化设备配置方案,下层通过潮流计算评估系统在不同负荷场景下的运行性能,综合考虑电压稳定性、供电可靠性及可再生能源消纳能力,最终通过Matlab编程实现完整求解流程,为高渗透率分布式电源接入背景下的配电网规划提供了有效的技术支撑。; 适合人群:具备电力系统分析基础和Matlab编程能力的研究生、高校科研人员及从事新能源并网、智能配电网规划与优化的工程技术人员。; 使用场景及目标:①研究含高比例光伏接入的配电网规划与运行协同优化问题;②掌握双层优化建模方法与粒子群算法在复杂电力系统问题的应用技巧;③为实际工程分布式光伏与储能系统的科学选址与容量配置提供理论依据与仿真验证平台。; 阅读建议:建议读者结合Matlab代码深入理解双层迭代求解机制,重点关注算法收敛性分析、参数敏感性测试,并可通过更换初始种群、调整权重因子或引入其他标准测试系统(如IEEE69节点)进行对比实验,进一步验证所提模型的普适性与鲁棒性。

34,875

社区成员

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

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