欢迎来到Doc100.Net免费学习资源知识分享平台!
您的位置:首页 > 程序异常 >

2个语句的执行效率有关问题

更新时间: 2014-01-05 02:17:03 责任编辑: Author_N1

 

2个语句的执行效率问题
语句A

select  top 1 *   from  CarVehicleData_tbl where c_id =80   order by  [CSN_UpdateTime] desc


语句B

select  *   from  CarVehicleData_tbl where [CSN_ID] in ( select max([CSN_ID])
from      CarVehicleData_tbl c
where C_ID=80
group by [CSN_Part],[CSN_Type])

C_ID CSN_UpdateTime   我都做了索引
但是语句A 执行要十几秒, 而语句B只要3秒

--参考方法--
引用:
Quote: 引用:

如果按你这样说,就不可能存在复合索引了。

Quote: 引用:

Quote: 引用:

没必要单独弄,开销更大

我听说 索引对  查询字段的顺序要求非常严格,我担心命不中索引,所以分别建的


我看有人针对 索引字段的顺序进行测试的 帖子, 是不同的顺序有不同的效率


确实是的,索引的基本原理:

1.就是前缀性,其实就是字段的顺序,查询中的where 条件字段,要放到前面。

2.就是选择性,也就是能过滤掉大部分数据的字段,尽可能放到前面
--参考方法--
基本上 也就是这种办法了,max的效率还是可以的
--参考方法--
我觉得是第一个走的索引不合理。
如果有个
索引是 ([C_ID],[CSN_UpdateTime])
应该就不会有执行计划中嵌套循环的部分了。

--参考方法--
最简单的方法就是重编译,不过要看你的语句频率,如果频繁编译,对CPU的开销也很高,参数嗅探你去搜一下吧,我也没有官方定义,怕没有解析清楚。plan guide这些网上也有,没必要贴给你
--参考方法--
引用:
1. 如果我要取一组数据中的最大值(最新值)  用什么方式比较好?

2. 针对语句B ,  我弄一个缓存表 , 来专门放 C_ID 对应的 最大值(最新值), 效率上值得吗?


1,一般情况下取max,  当然具体情况具体分析, 上面说过了。
2,看c_id重复率或者单个C_ID对应的记录数, 重复率越高,可行性越大。 重复率越低(极限情况就是一个唯一,当然你的现实中可能性不大,只是举例子),因为串连操作,可能得不尝失。

总之数据库优化(特指查询优化)就是, 没有教条, 没有哪个是绝对对的或者绝对高效的, 都只是在特定场合和条件下相对的。
上一篇:上一篇
下一篇:下一篇

 

随机推荐程序问答结果

 

 

如对文章有任何疑问请提交到问题反馈,或者您对内容不满意,请您反馈给我们DOC100.NET论坛发贴求解。
DOC100.NET资源网,机器学习分类整理更新日期::2014-01-05 02:17:03
如需转载,请注明文章出处和来源网址:http://www.doc100.net/bugs/t/7940/
本文WWW.DOC100.NET DOC100.NET版权所有。