同一个sql查询效率不一样

aswangod 2018-06-20 02:57:28
,如图所示,两个查询差不多,前一个不到1秒可完成,后一个查询需要2分钟,数据在同一个数据库,同一台机子,同一个表中,用网上教的方法,分析了下查询方法,不知道如何解决了,请教高手,江湖救急
注:表未建立任何索引,表数据约30G,不考虑做分区表
...全文
369 13 点赞 打赏 收藏 举报
写回复
13 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
吉普赛的歌 2018-08-29
引用 12 楼 aswangod 的回复:
一样的快!但是用最初的查询就是很慢,奇怪的问题


一点都不奇怪。
虽然都是 top 1 , 但毕竟不用 top 1 时, 总数相差太大。
有时 top 1 也无法提高效率, 甚至比不用 top 1 更慢。
  • 打赏
  • 举报
回复
aswangod 2018-08-29
一样的快!但是用最初的查询就是很慢,奇怪的问题
  • 打赏
  • 举报
回复
吉普赛的歌 2018-06-21
引用 8 楼 aswangod 的回复:
感觉没什么用,查询依旧很慢,不过变通了一个方法可行
Select Top 1 From FloatTable Where TagIndex=272 And DateAndTime between '当前时间' and '当前时间'
测试了一下,很快,不到1s,满足要求,以后查询就用存储过程算了。
不过没搞清楚什么原因,很是奇怪

正好用上了你#7的索引, 当然快。

你用我 #6 的索引试一下看看。
前后位置换了, 区别很大。
  • 打赏
  • 举报
回复
aswangod 2018-06-21
引用 9 楼 xiaoxiangqing 的回复:
语句是差不多,是执行计划自动优化的,可能是第二条语句返回的数据比较多吧

Top 1只返回一条数据啊
  • 打赏
  • 举报
回复
xiaoxiangqing 2018-06-21
语句是差不多,是执行计划自动优化的,可能是第二条语句返回的数据比较多吧
  • 打赏
  • 举报
回复
aswangod 2018-06-21
感觉没什么用,查询依旧很慢,不过变通了一个方法可行
Select Top 1 From FloatTable Where TagIndex=272 And DateAndTime between '当前时间' and '当前时间'
测试了一下,很快,不到1s,满足要求,以后查询就用存储过程算了。
不过没搞清楚什么原因,很是奇怪
  • 打赏
  • 举报
回复
aswangod 2018-06-21
删除了以前的索引,正在运行这个:CREATE NONCLUSTERED INDEX NC_IDX_FloatTable ON FloatTable(DateAndTime ASC, TagIndex ASC);
  • 打赏
  • 举报
回复
吉普赛的歌 2018-06-21
这样试一下看看:
--1. 删除原来没用的索引
DROP INDEX [FloatTableIndex] ON [dbo].[FloatTable]
--2. 建立新索引
CREATE NONCLUSTERED INDEX [FloatTableIndex] ON [dbo].[FloatTable]( [TagIndex], [DateAndTime] )
  • 打赏
  • 举报
回复
aswangod 2018-06-20
以前做过分区表、硬盘要求太大了(日志文件),实在不行,考虑做成内存表+触发器+永久表(分区、索引、),oh 天哪,头有点大
  • 打赏
  • 举报
回复
aswangod 2018-06-20
1.建立了一个索引,没有提高效率:
CREATE NONCLUSTERED INDEX [FloatTableIndex] ON [dbo].[FloatTable]
(
[DateAndTime] ASC
)
INCLUDE ( [TagIndex]) WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, SORT_IN_TEMPDB = OFF, IGNORE_DUP_KEY = OFF, DROP_EXISTING = OFF, ONLINE = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]

2.执行sql:select tagindex,count(1) as cnt
from [xw].dbo.floattable with(nolock)
group by tagindex;

3.感觉是那个SQL分析引擎对两句话解释的不一样,导致效率不一样

  • 打赏
  • 举报
回复
丰云 2018-06-20
真没看出来这两个语句那里【差不多】。。。。。。。
  • 打赏
  • 举报
回复
shinger126 2018-06-20
第一句有行查找,第二句没有,应该是tagindex数据在值为270时很少,而为272时很多,这种情况下,对于top查询而言,在order by字段上建聚集索引应该可以解决。你可以尝试一下
  • 打赏
  • 举报
回复
吉普赛的歌 2018-06-20
select tagindex,count(1) as cnt 
from [xw].dbo.floattable with(nolock)
group by tagindex;
先查一下, 贴截图出来
  • 打赏
  • 举报
回复
发帖
疑难问题
创建于2007-09-28

2.1w+

社区成员

MS-SQL Server 疑难问题
申请成为版主
帖子事件
创建了帖子
2018-06-20 02:57
社区公告
暂无公告