查询效率问题。 求解

RUNBEAR 2013-07-03 05:14:44

select top 100 * from A
d JOIN V1 c on d.F1=c.F1
JOIN B b
on d.F1=b.1
where FState=1 and FIsSafe='是'
order by d.FTime


A表单表有700W条数据。

主要问题是order by d.Time,要1分多钟才出来,而且看执行计划,貌似整个表遍历了一次。。。
如果我换成order by d.Time desc 3秒就出结果了。

FState与FIsSafe都有加索引(asc),也有加一个联合索引(FState,FIsSafe)

传送门:http://bbs.csdn.net/topics/390507709

...全文
151 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
唐诗三百首 2013-07-11
  • 打赏
  • 举报
回复
提醒LZ一下: 大索引的维护成本比较高喔.
RUNBEAR 2013-07-11
  • 打赏
  • 举报
回复
感谢各位。。。已经搞定了。 后来我给语句加了个强制使用索引。 速度快了,再慢慢跳过来了。 是一个联合索引(6个字段),包含列(十几个字段)。。。真心不想加。。。 加了后,2秒左右就查出来了。 谢谢各位
唐诗三百首 2013-07-11
  • 打赏
  • 举报
回复
在A表FTime字段上建asc索引试试.. 另建议不要用"select * ..",把需要返回的字段列出来.
hackervip1988 2013-07-11
  • 打赏
  • 举报
回复
不是说 直接 * 的话 ,建立索引无效吗 求指导
铁歌 2013-07-08
  • 打赏
  • 举报
回复
1. 确保F1=c.F1 表关联的的几个字段 建立了索引 2. ORDERBY后面的字段建立了索引,如果经常是desc排序的,那么建立索引可以直接建立倒叙排序的索引 3. 组合索引可以考虑建立 4。打开查询计划和执行开关 ,分析开销大的,并通过走索引等方式降低开销从而提升查询效率。。。
RUNBEAR 2013-07-03
  • 打赏
  • 举报
回复
引用 1 楼 SmithLiu328 的回复:
order by d.Time desc和不加DESC对于数据库的执行计划有什么区别?
不加desc,看执行计划,执行次数就相当于整个表的数据量了。。。 如果语句:

select top 100 * from A
                     d  JOIN V1 c on d.F1=c.F1 
                     JOIN B b 
                     on d.F1=b.1 
where FState=1 
order by d.FTime
不要FIsSafe条件,也是几秒就出结果了。 为什么呢。 我表达的可能不太好。
KevinLiu 2013-07-03
  • 打赏
  • 举报
回复
order by d.Time desc和不加DESC对于数据库的执行计划有什么区别?

34,576

社区成员

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

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