none
一条SQL语句的优化? RRS feed

  • 问题

  • 现在有一条SQL语句,明明有一个Non-Clustered index存在,但是却要走Clustered index scan.
    这样下来执行16秒钟.
    但是假如手动指定了index,那么执行时间就只有1秒钟.
    之后,有将该表的索引以及统计信息更新或者重建
    另外看了下cost,手动指定索引成本稍高点,但是由于SQLServer的优化器是从cost考虑的,所以就选择了clustered index scan了.

    除了手动指定index之外,是否还有其他办法来解决这个问题,使得可以走到non-clustered index?
    现在有一条SQL语句,明明有一个Non-Clustered index存在,但是却要走Clustered index scan.
    这样下来执行16秒钟.
    但是假如手动指定了index,那么执行时间就只有1秒钟.
    之后,有将该表的索引以及统计信息更新或者重建
    另外看了下cost,手动指定索引成本稍高点,但是由于SQLServer的优化器是从cost考虑的,所以就选择了clustered index scan了.

    除了手动指定index之外,是否还有其他办法来解决这个问题,使得可以走到non-clustered index?一条SQL语句的优化?

    If you haven't all the things you want,be grateful for the things you don't have that you didn't want.

    2013年4月18日 2:59

答案

  • 已经找到解决办法.

    之前有提到,使用指定索引Cost更高.之后找到百分比最大的部分进行优化,发现是Key Lookup.

    之后将该栏位加入到该指定索引的include中解决该问题.


    If you haven't all the things you want,be grateful for the things you don't have that you didn't want.

    • 已标记为答案 Wison-Ho 2013年4月18日 6:49
    2013年4月18日 6:49

全部回复

  • Optimizer picks plan based on stats, should keep stats up to date.
    2013年4月18日 3:22
  • 已经有更新过统计信息了,并且是带有fullscan参数的

    If you haven't all the things you want,be grateful for the things you don't have that you didn't want.

    2013年4月18日 4:07
  • 已经找到解决办法.

    之前有提到,使用指定索引Cost更高.之后找到百分比最大的部分进行优化,发现是Key Lookup.

    之后将该栏位加入到该指定索引的include中解决该问题.


    If you haven't all the things you want,be grateful for the things you don't have that you didn't want.

    • 已标记为答案 Wison-Ho 2013年4月18日 6:49
    2013年4月18日 6:49