SQL Server 数据量太大。怎么让查询效率高?

yangling9317 2017-07-15 01:24:09
rt,我有一个表数据量达到千万级,我现在要查这个表里的一些字段,怎么查才能速度快一点
SELECT work_date,major,style,jo_key_seq,component,qty,bundle_id,jo_sku_key_seq FROM dbo.rfid_transaction_table 
where RTRIM(style) = '68036N/SS10' and work_date>='2009-07-01'
and work_date<='2017-10-01' and major = '911'

这一句查下来要四分钟,想控制在两分钟以内
...全文
3389 15 打赏 收藏 转发到动态 举报
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
weixin_44520912 2019-11-12
  • 打赏
  • 举报
回复
weixin_44520912 2019-11-12
  • 打赏
  • 举报
回复
qq_39966593 2019-01-18
  • 打赏
  • 举报
回复
数据量大就分页啊,不然你就分流,一个查个几分之1,
吉普赛的歌 版主 2017-07-19
  • 打赏
  • 举报
回复
引用 10 楼 shinger126 的回复:
建议重建主键,主键索引改为非聚集,然后在work_date上建聚集索引,其他2个列看情况,选择性不高的话,不用建索引
他的查询语句跨了 8 年……
xiaoxiangqing 2017-07-19
  • 打赏
  • 举报
回复
看可不可以用到索引
OwenZeng_DBA 2017-07-18
  • 打赏
  • 举报
回复
引用 8 楼 baidu_35289351 的回复:
[quote=引用 3 楼 z10843087 的回复:] 你的TRTIM 是完全不需要的,详细可以参考我的博客:http://blog.csdn.net/z10843087/article/details/75174595
看了你写的,是不是所有 扫描都比查询会时间的? 还有就是,如果结果只有100条记录,和结果有10W条记录,查询时间是不是会相差很多的。[/quote] 1. 不是所有扫描都都比查询 更慢,看具体的场景。 2. 肯定会差很多 我觉得你现在是有实际的案例,你按照上面的方法改善下试试就知道了。
baidu_35289351 2017-07-18
  • 打赏
  • 举报
回复
引用 3 楼 z10843087 的回复:
你的TRTIM 是完全不需要的,详细可以参考我的博客:http://blog.csdn.net/z10843087/article/details/75174595
看了你写的,是不是所有 扫描都比查询会时间的? 还有就是,如果结果只有100条记录,和结果有10W条记录,查询时间是不是会相差很多的。
OwenZeng_DBA 2017-07-18
  • 打赏
  • 举报
回复
引用 6 楼 yangling9317 的回复:
就这一个索引。
按照4楼说的索引加上就可以了。rtrim最好去掉,原因我前面已经说了
yangling9317 2017-07-18
  • 打赏
  • 举报
回复


就这一个索引。
shinger126 2017-07-18
  • 打赏
  • 举报
回复
建议重建主键,主键索引改为非聚集,然后在work_date上建聚集索引,其他2个列看情况,选择性不高的话,不用建索引
卖水果的net 版主 2017-07-15
  • 打赏
  • 举报
回复
索引情况也说一下,2kw的数据跑4分钟说不过去。
吉普赛的歌 版主 2017-07-15
  • 打赏
  • 举报
回复
#3所说的不加 rtim 想法很不错。 可以加索引试下:
--建立索引     
CREATE INDEX IX_rfid_transaction_table_major_work_date_style ON dbo.rfid_transaction_table
( major,work_date,style )	--如果哪个列能快速筛选缩小结果集,则那个列放在最前面(看你日期跨度太大,所以不应该将日期放前面)
INCLUDE(work_date,
       major,
       style,
       jo_key_seq,
       component,
       qty,
       bundle_id,
       jo_sku_key_seq)
OwenZeng_DBA 2017-07-15
  • 打赏
  • 举报
回复
你的TRTIM 是完全不需要的,详细可以参考我的博客:http://blog.csdn.net/z10843087/article/details/75174595
OwenZeng_DBA 2017-07-15
  • 打赏
  • 举报
回复
引用 楼主 yangling9317 的回复:
rt,我有一个表数据量达到千万级,我现在要查这个表里的一些字段,怎么查才能速度快一点
SELECT work_date,major,style,jo_key_seq,component,qty,bundle_id,jo_sku_key_seq FROM dbo.rfid_transaction_table 
		where RTRIM(style) = '68036N/SS10' and work_date>='2009-07-01' 
		 and work_date<='2017-10-01' and major = '911'
这一句查下来要四分钟,想控制在两分钟以内
千万级别的表不算很大。1.调整好索引。可以吧表示的索引情况发出来 2.style 列上不要使用函数
二月十六 版主 2017-07-15
  • 打赏
  • 举报
回复
表的索引情况是什么样的?

34,576

社区成员

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

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