100分 大家都来讨论讨论sql语句优化的问题

pupil2003 2005-03-11 11:30:02
我有一个短程序如下:
select * from (
select arg.bld_grp_desc,g.group_name,p.* from tb_person p,tb_group g,tb_abo_rh_grp arg
where g.group_id=p.group_id
and arg.bld_grp_id=p.bld_grp_id
and p.id_card like @idcard18
union
select arg.bld_grp_desc,g.group_name,p.* from tb_person p,tb_group g,tb_abo_rh_grp arg
where g.group_id=p.group_id
and arg.bld_grp_id=p.bld_grp_id
and p.id_card like @idcard15
)qqq
order by bld_grp_desc,name

我在id_card字符串类型,建了索引,idcard15 和idcard18分别为15位和18位身份证号,表内大约有35万条数据,大部分情况下可在3秒内查出结果,有百分之2-3的机会查询会超时(大于)3分钟,大家帮我看看语句到底有什么问题
...全文
189 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
pupil2003 2005-03-11
  • 打赏
  • 举报
回复
我通过少量的实验无法捕捉到这一问题,这个问题是客户反映的,搞不懂为什么会时好时坏
pupil2003 2005-03-11
  • 打赏
  • 举报
回复
谢谢,@idcard15和@idcard18不带通配符
另外 Softlee81307(孔腎)朋友的写法用了or操作不是会造成对表的顺序存取吗?这要效率要低于union操作吧。
dzhfly 2005-03-11
  • 打赏
  • 举报
回复
用第一楼吧 或这样不行吗
select arg.bld_grp_desc,g.group_name,p.* from tb_person p,tb_group g,tb_abo_rh_grp arg
where g.group_id=p.group_id
and arg.bld_grp_id=p.bld_grp_id
and (p.id_card like @idcard18
or p.id_card like @idcard15 )order by bld_grp_desc,name
wyb0026 2005-03-11
  • 打赏
  • 举报
回复
like 最好能不用就不用不要用
子陌红尘 2005-03-11
  • 打赏
  • 举报
回复
传入参数@idcard15和@idcard18的值是什么格式?带有通配符?

如果带有通配符,那么当传入的格式是'%xxxx%'以及'%xxxx'时,无法使用索引查找,将导致全表扫描
这也就是"为什么有百分之2-3的机会查询会超时(大于)3分钟"的问题的原因了
Softlee81307 2005-03-11
  • 打赏
  • 举报
回复
-----改成一起就行了
select * from (
select arg.bld_grp_desc,g.group_name,p.* from tb_person p,tb_group g,tb_abo_rh_grp arg
where g.group_id=p.group_id
and arg.bld_grp_id=p.bld_grp_id
and (p.id_card like @idcard18
or p.id_card like @idcard15 )
)qqq
order by bld_grp_desc,name
pupil2003 2005-03-11
  • 打赏
  • 举报
回复
多谢,我再仔细测试一下程序
zjcxc 元老 2005-03-11
  • 打赏
  • 举报
回复
单机和并发并不冲突嘛,正如你说的,程序逻辑设置如果不太好的好,就可能出现此问题

因为问题是偶尔且没有固定条件下出现的,我认为锁的原因比较大
pupil2003 2005-03-11
  • 打赏
  • 举报
回复
另,zjcxc(邹建)及个位仁兄,我的QQ:16847315欢迎指教
pupil2003 2005-03-11
  • 打赏
  • 举报
回复
不好意思,首先纠正一下“@idcard15和@idcard18不带通配符”应该是“@idcard15和@idcard18左侧不带通配符”,也就是说理论上是能够利用索引的。

zjcxc(邹建) 老兄,你也来了,多谢支持。
这个程序用的是单机数据库,不存在并发操作的问题,不过不能排除前面有操作未完成的情况,如果有动作未提交的话,会出现此类问题是吧?
zjcxc 元老 2005-03-11
  • 打赏
  • 举报
回复
表内大约有35万条数据,大部分情况下可在3秒内查出结果,有百分之2-3的机会查询会超时(大于)3分钟

这个不一定是查询问题,有可能在你查询的时候,其他处理进程锁住了被查询的表,这样查询必须锁释放才能继续执行,这时自然速度就慢了


要确定是锁还是查询条件的问题,你可以让用户记录下查询慢时的各种查询条件,对这些进行分析即可
子陌红尘 2005-03-11
  • 打赏
  • 举报
回复
@idcard15和@idcard18不带通配符
-----------------------------------------------
那就不要用like,直接用=就得了,呵呵

用DBCC CHECKTABLE试试,也许是存储数据的磁盘的块有问题吧
lishengyu 2005-03-11
  • 打赏
  • 举报
回复

and p.id_card like @idcard15
而@idcard15 里没有通配符
这不等效于
p.id_card =@idcard15
 吗
如果是这样的话,把原来的like 改成= 号,
效率将是最快的
内容概要:本文针对传统三电平并网逆变器存在的谐波含量高、电网不平衡工况适应性差及动态响应滞后等问题,提出了一种基于有源中点箝位(ANPC)三电平逆变器的高性能并网控制策略。该策略融合了双极性倍频脉宽调制(DPWMA)、正负序离锁相技术和电网电压前馈控制,构建了“精准同步-扰动补偿-优质调制”的一体化控制体系。通过Simulink搭建仿真模型,在稳态对称、电网不平衡及动态扰动等多种工况下进行验证,结果表明该复合控制策略能显著降低并网电流谐波,提升锁相精度,有效抑制功率波动,并大幅缩短系统动态调节时间,增强了逆变器在复杂电网环境下的稳定性与适应性。; 适合人群:从事电力电子、新能源并网、智能电网等相关领域的科研人员及工程技术人员,尤其适合具备一定MATLAB/Simulink仿真基础、专注于并网逆变器控制策略研究的研发人员; 使用场景及目标:①用于提升大功率并网逆变器在电网电压不平衡、骤升骤降等非理想工况下的运行性能;②为ANPC拓扑结构与先进控制算法(如DPWMA、前馈-反馈复合控制)的协同优化提供仿真依据和技术参考;③适用于新能源发电系统、工业变流装置等对电能质量和动态响应要求较高的应用场景; 阅读建议:建议读者结合文中提出的控制架构图与仿真模型逐步复现,重点关注DPWMA调制实现、正负序离锁相环设计及前馈补偿环节的参数整定,同时通过多工况仿真对比析各项性能指标,深入理解各模块间的协同作用机制。
内容概要:本文以ANPC三电平并网逆变器为研究对象,提出了一种融合双极性倍频脉宽调制(DPWMA)、正负序离锁相与电网电压前馈控制的高性能并网控制策略。通过对ANPC拓扑结构的析,阐明其在开关损耗均衡、中点电位稳定和低输出谐波方面的硬件优势,为高质量并网奠定基础。在此基础上,DPWMA调制策略有效提升输出波形的等效开关频率,显著降低谐波含量;正负序离锁相技术可精准提取电网正序量,克服电网不平衡导致的锁相失真与电流不对称问题;电网电压前馈控制则增强系统对动态扰动的响应能力,缩短调节时间。文章构建了“信号采集—核心控制—调制驱动”的三层协同控制架构,并通过多工况仿真验证了该策略在稳态、不平衡及动态扰动条件下的优越性能,结果表明系统具备优异的电能质量、运行稳定性与抗扰能力。; 适合人群:电力电子、新能源并网、自动控制等相关领域的科研人员、研究生及从事逆变器设计与控制的工程技术人员。; 使用场景及目标:① 提升大功率并网逆变器在复杂电网环境下的运行稳定性与电能质量;② 解决电网电压不平衡、谐波畸变、电压骤变等工况下的锁相失真与电流不对称问题;③ 优化动态响应性能,应用于新能源发电、工业变流器等高可靠性要求场景; 阅读建议:建议结合Matlab/Simulink仿真平台,复现文中控制策略与仿真模型,重点理解DPWMA调制实现方法、正负序离锁相环设计及前馈-反馈复合控制结构的协同机制,并通过不同扰动工况测试系统鲁棒性。
内容概要:本文研究了基于Q-Learning自适应强化学习的PID控制器在自主水下航行器(AUV)运动控制中的应用,旨在提升水下机器人在复杂、非线性及动态变化海洋环境中的控制精度与自适应能力。通过将强化学习算法与传统PID控制深度融合,构建了一种能够在线自主调整PID参数的智能控制框架,有效克服了传统PID控制器在面对模型不确定性、外部干扰和时变系统特性时适应性不足的问题。研究详细阐述了AUV的动力学建模过程,并精心设计了Q-Learning算法的状态空间、动作空间与奖励函数,使其能在Matlab仿真环境中通过不断的交互试错进行学习与优化,最终实现对航向角、深度等关键运动姿态的高精度、强鲁棒性控制。仿真结果充验证了该方法在响应速度、稳态精度和抗干扰性能方面相较于传统方法的显著优越性,为智能水下装备的自主决策与控制提供了重要的理论依据和技术路径。; 适合人群:具备自动控制理论基础、强化学习初步知识及MATLAB编程能力的研究生、科研人员及从事智能机器人、无人系统控制开发的工程师。; 使用场景及目标:①应用于水下机器人、无人潜航器等复杂动态系统的智能控制设计;②解决传统PID控制器参数整定困难、环境适应性差和鲁棒性不足的关键问题;③推动强化学习等人工智能技术在实际工程控制系统中的落地应用、性能优化与可靠性验证。; 阅读建议:建议读者结合提供的Matlab代码进行仿真实践,重点关注Q-Learning与PID的耦合机制、状态量与奖励函数的设计原则,深入理解智能控制策略的训练收敛过程、超参数敏感性及其在不同工况下的性能表现。

34,876

社区成员

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

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