首页 新闻 搜索 专区 学院

ROW_NUMBER() 分页的时候,好像没有利用非聚集索引

0
悬赏园豆:10 [已解决问题] 解决于 2008-07-14 19:21
<P>通过执行计划分析来看,使用 ROW_NUMBER() 的时候,好像没有利用非聚集索引</P> <P>with t_pager as (<BR>&nbsp;&nbsp;&nbsp; select *,myIndex = ROW_NUMBER() OVER (ORDER BY Empcode ) FROM Employee <BR>&nbsp;where EmpTypeID = 2</P> <P>)<BR>SELECT * from t_pager WHERE myIndex between 11 and 20;</P> <P>Empcode &nbsp;,EmpTypeID 这两个字段加不加非聚集索引,计划分析的结果都是一样的。只有按照主键排序,计划分析才会不一样。</P> <P>分页结果倒是正确的。效率好像还很高。严重不解中。</P> <P>&nbsp;</P>
问题补充: 默认的情况,主键都是聚集索引呀。除非单独设置。 排序是非常咱用资源的呀,利用索引的话,就可以节省很多的资源,这个对于分页是很重要的! 聚集索引的话,正序和倒序执行计划都是一样的。不知道你有没有看过,我刚刚看过了,一样的。 ============= 服了你了。感谢你来捧场。 EmplID就是主键,就是默认的。是聚集索引。 如果是其他的分页算法,那么就可以利用非聚集索引了。
金色海洋(jyk)的主页 金色海洋(jyk) | 菜鸟二级 | 园豆:290
提问于:2008-06-22 10:20
< >
分享
最佳答案
0
1、ROW_NUMBER() 为什么要加载索引(管它是聚集还是非聚集)?排序操作而已。 2、主键 “绝对不等于” 聚集索引。 3、“只有按照主键排序,计划分析才会不一样”,说明你的主键完全是默认设置的。你要不试试(ORDER BY 你的主键 DESC),然后再看看执行计划? ~~~~~~~~~~~~~~~~~~~~~~~~~~ 分析:这里需要了解的知识点主要在聚集索引和非聚集索引的存储方式上,然后再加上“排序操作究竟是在干什么”,然后你就能非常清楚这个问题的“为什么”了。
电机拖动 | 小虾三级 |园豆:1295 | 2008-06-22 14:42
其他回答(2)
0
Jared.Nie | 园豆:1940 (小虾三级) | 2008-06-22 21:26
0
sql按照那一个索引进行查询是查询优化器做的,除非你在sql语句中指定根据那个索引来查(参考:http://www.google.cn/search?hl=zh-CN&q=%E6%8C%87%E5%AE%9A%E7%B4%A2%E5%BC%95%E6%9F%A5%E8%AF%A2&meta=&aq=f)。 但是一般不推荐指定索引。
玉开 | 园豆:8822 (大侠五级) | 2008-06-23 09:39
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册