请教SQL表查询慢的原因?

bingdaoice 2015-03-05 09:22:15
有个问题咨询大家,SQL 数据库中有一个表比较大(68G,170多万行数据,里面有1个字段存的是WORD文件数据,4个字段存的是图片),现在这个表查询比较慢,经常出现一查询就把服务器资源占完,导致系统其它操作出现超时,(这个表建了一个索引)。
请问如何解决这个问题。谢谢!(字段如下)
DetailId bigint Unchecked
Idx int Unchecked
Kind varchar(20) Unchecked
CorpName varchar(100) Unchecked
InstrName varchar(50) Unchecked
Spec varchar(50) Unchecked
BatchNo varchar(50) Unchecked
Mfr varchar(50) Unchecked
ItemId int Checked
Rules varchar(200) Unchecked
Conclusion varchar(50) Unchecked
VerifyTime datetime Unchecked
RecvTime datetime Unchecked
pgCount int Unchecked
FtpId int Checked
FExt1 varchar(50) Checked
temperature float Unchecked
humidity float Unchecked
Addr varchar(100) Unchecked
CertifBack image Unchecked
testId1 int Unchecked
testId1Sign image Unchecked
testId2 int Unchecked
testId2Sign image Unchecked
CheckerId int Unchecked
CheckerSign image Unchecked
CheckTime datetime Unchecked
ApproverId int Unchecked
ApproverSign image Unchecked
ApproveTime datetime Unchecked
PrintCount int Unchecked
PrintCheck int Unchecked
PrintId int Unchecked
PrintTime datetime Unchecked
Working varchar(50) Unchecked
...全文
764 27 打赏 收藏 转发到动态 举报
写回复
用AI写文章
27 条回复
切换为时间正序
请发表友善的回复…
发表回复
qq_26353243 2015-03-06
  • 打赏
  • 举报
回复
wodw dw dw d wd wddw
qq_26352621 2015-03-06
  • 打赏
  • 举报
回复
好麻烦的。。。。。。。。。。。。。。。。。。。。。。。。。。。。。
xiaoxiangqing 2015-03-06
  • 打赏
  • 举报
回复
不常用的字段,专门放一张表保存
bingdaoice 2015-03-06
  • 打赏
  • 举报
回复
[quote=引用 19 楼 x_wy46 的回复:] 你的意思是说,尽量增加筛选条件?以达到缩小扫描数据条数的范围,从而达到优化速度的效果?
程序猿老曾 2015-03-06
  • 打赏
  • 举报
回复
建议建立一个备份表~~~~
哥哥大 2015-03-06
  • 打赏
  • 举报
回复
重建索引会加快查询速度,如: DBCC DBREINDEX (TableName1,Index_Name1)
bingdaoice 2015-03-05
  • 打赏
  • 举报
回复
引用 7 楼 x_wy46 的回复:
选中你的sql,然后ctrl+L贴出来执行计划
专注or全面 2015-03-05
  • 打赏
  • 举报
回复
选中你的sql,然后ctrl+L贴出来执行计划
bingdaoice 2015-03-05
  • 打赏
  • 举报
回复
引用 5 楼 x_wy46 的回复:
关键是看你是怎么sql查询语句是怎么执行的啊?
select rd.DeptId, c.*, rd.CertAmt from p_certif as c inner join p_instr as rd on c.Detailid=rd.Detailid inner join p_recv as r on r.Recvid=rd.recvId where 1=1 and r.RegTime >='2014/3/21' and r.RegTime<'2014/4/1' order by CorpName, c.Idx 这个语句一执行直接就卡起。超时了。
专注or全面 2015-03-05
  • 打赏
  • 举报
回复
关键是看你是怎么sql查询语句是怎么执行的啊?
bingdaoice 2015-03-05
  • 打赏
  • 举报
回复
引用 1 楼 wuxue0427 的回复:
看下是否索引碎片过多?
不知道如何查询索引碎片过多?还有就是如何处理 从表属性里我看到索引空间“5.031 MB”,不知道是不是有碎片了
bingdaoice 2015-03-05
  • 打赏
  • 举报
回复
引用 2 楼 ky_min 的回复:
建议表重构一下,不要那些二制数据的字段,把它们导出到服务器的文件位置去,数据库这边只保存文件访问路径
在不改变表结构的情况下处理问题。
还在加载中灬 2015-03-05
  • 打赏
  • 举报
回复
建议表重构一下,不要那些二制数据的字段,把它们导出到服务器的文件位置去,数据库这边只保存文件访问路径
wuxue0427 2015-03-05
  • 打赏
  • 举报
回复
看下是否索引碎片过多?
专注or全面 2015-03-05
  • 打赏
  • 举报
回复
引用 17 楼 bingdaoice 的回复:
[quote=引用 13 楼 x_wy46 的回复:] 我建立了索引,也检查了索引碎片,用SQL Server Management Studio自带的“全部重新组织”处理了。 但是速度依旧无明显变化。我用select rd.DeptId, c.*, rd.CertAmt from p_certif as c inner join p_instr as rd on c.Detailid=rd.Detailid inner join p_recv as r on r.Recvid=rd.recvId 这个语句查询,耗时1分10秒,数据是20199条,先前没处理前,耗时也是1分10秒左右。
你这样查询肯定是不变的了,你在应用端也是没有任何筛选条件地去查询吗? 所谓的优化就是“尽可能高效地利用到筛选条件”,有筛选条件,查询不一定能用得到,造成查询效率较低 但是没有查询条件,哪有优化的余地
bingdaoice 2015-03-05
  • 打赏
  • 举报
回复
请问除了把表拆分外,就没有其它不对表结构进行改动可以提高效率的方法了吗?
bingdaoice 2015-03-05
  • 打赏
  • 举报
回复
[quote=引用 13 楼 x_wy46 的回复:] 我建立了索引,也检查了索引碎片,用SQL Server Management Studio自带的“全部重新组织”处理了。 但是速度依旧无明显变化。我用select rd.DeptId, c.*, rd.CertAmt from p_certif as c inner join p_instr as rd on c.Detailid=rd.Detailid inner join p_recv as r on r.Recvid=rd.recvId 这个语句查询,耗时1分10秒,数据是20199条,先前没处理前,耗时也是1分10秒左右。
  • 打赏
  • 举报
回复
建议你select 表的时候用哪个字段,就写哪个字段,不要用select *, 这样当你用不到那些二进制的字段的时候,速度会比较快。 另外建议你改变表结构,只在表中保存文件的目录,文件放到服务器上,不要存在表里面,即使一定要存在表里面,也要分表存,把原来的表拆成2张,把那些大字段放到新建的一张表里面
加载更多回复(7)

22,209

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 疑难问题
社区管理员
  • 疑难问题社区
  • 尘觉
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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