刚在MSDN上看到对Option的解释为:指定应在整个查询中使用所指定的查询提示。 每个查询提示只能指定一次,但允许指定多个查询提示。 使用该语句只能指定一个 OPTION 子句。
请问如下问题:
1.查询提示是什么意思?
2."每个查询提示只能指定一次,但允许指定多个查询提示"这又是什么意思?
3.Option中经常用(fast 整数),请问其中的fast和整数分别是什么意思?
4.SELECT语句中用Option子语句后好象会提高整个语句的速度吗?

解决方案 »

  1.   

    http://msdn.microsoft.com/zh-cn/library/ms190322.aspx
      

  2.   

    select 语句带option,我几乎没有用过。网上查到一些相关资料如下评价:
    http://zhidao.baidu.com/link?url=foiqbo9R3vdSB65Hqf4FJ8opX5RzICrrfcScl9X59aDK9W1zKQzZpOuCaEkktC8Z9dFcKNwU5os7OptPMr2nHq不推荐.
      

  3.   

    1.查询提示是什么意思?
    --实际上是通过标识来告诉,查询分析器或存储引擎你要怎么做,剩下的它来完成 2."每个查询提示只能指定一次,但允许指定多个查询提示"这又是什么意思?
    --option 1,2,3 这样OK--option 1
    --option 2 这样不行3.Option中经常用(fast 整数),请问其中的fast和整数分别是什么意思?
    --fast 是告诉尽快返回指定的整数行结果,而无需等待全部逻辑执行完成。4.SELECT语句中用Option子语句后好象会提高整个语句的速度吗?
    --双刃剑,用好可提高,用不好,慢的不是一星半点儿,需要比较丰富的经验才能用好。 
    --实际环境,用的较少
      

  4.   


    1.查询提示是sql server提供的,用于修改查询优化器行为的一种参数,之所以sql server 要提供这个,主要是由于,有时候sql server不能产生最优化的执行计划,于是,你可以通过这个查询提示,来告诉优化器,要采用何种算法。2.每个查询提示只能用一次,但允许使用多个查询提示。
      查询提示有N多种,比如:hash join,merge union ,fast N,maxdop N ,有一大堆。
      你不能在一个查询中指定多次 hash join,但你可以指定hash join,又指定 maxdop n,但你不能指定hash join两次,那就好报错啦。
      比如:
    select *  
    from  
    (   
        select 'abc' as v,1 as vid  
        union all  
        select 'cd',2  
    )a  
    inner join  
    (  
        select 'cd' as v,2 as vid  
        union all  
        select 'abc',1  
    )b  
    on a.vid = b.vid   
    option(hash join,maxdop 2)3.FAST number_rows 
    指定对查询进行优化,以便快速检索第一个 number_rows.。该值是非负整数。在返回第一个number_rows 后,查询继续执行并生成完整的结果集。这个一般用于那种分页的查询,比如查询结果一共100行,指定number_rows为10,那就是采用最快返回前10行的算法,当然后面的90也会返回,也就是他对这些返回的数据,采用了优先级,SQL SERVER 生成了优先返回10行的算法,而不是一次性返回100行的算法。4.关于是否能提高性能这个说法,我在实际工作中经常用,有时候效果非常明显,特别是对于表关联的查询提示,或者是联接提示。
    很多时候,同事说这个查询太慢要5分钟才能查询出结果,于是加上了inner hash join后,只要5秒就能返回结果,火箭般的速度,但有时候加了效果不大,所以这个你可以多试试,
    比如:
    select *  
    from  
    (   
        select 'abc' as v,1 as vid  
        union all  
        select 'cd',2  
    )a  
    inner join  
    (  
        select 'cd' as v,2 as vid  
        union all  
        select 'abc',1  
    )b  
    on a.vid = b.vid   
    option(hash join)select *  
    from  
    (   
        select 'abc' as v,1 as vid  
        union all  
        select 'cd',2  
    )a  
    inner hash join  --这个联接提示,更为灵活,适用于多表关联
    (  
        select 'cd' as v,2 as vid  
        union all  
        select 'abc',1  
    )b  
    on a.vid = b.vid    
      

  5.   

    还有这个是一篇关于,查询提示,表提示,联接提示的文章,里面的实际例子,你可看看:http://blog.csdn.net/sqlserverdiscovery/article/details/7942627
      

  6.   

    1.查询提示是什么意思?
    提示说白了就是干预sqlserver的判断和决定,用你希望的方式强制sqlserver运行
    2."每个查询提示只能指定一次,但允许指定多个查询提示"这又是什么意思?
    select * from tb with (holdlock,uplock)这样,但是不能有多个with,holdlock不知道有没有写错
    3.Option中经常用(fast 整数),请问其中的fast和整数分别是什么意思?
    好像是取整数那个值的行,类似top 整数
    4.SELECT语句中用Option子语句后好象会提高整个语句的速度吗?
    不一定,除非你已经对优化无能为力
      

  7.   

    另外请问在Update与Delete中怎样使用option,请问有这样的例子没?
      

  8.   

    update xx
    set xx=xx
    from xx with (uplock)
      

  9.   

    我是说在Update与Delete语句中怎样使用option子句?
      

  10.   

    UPDATE Production.Product
      SET ListPrice = ListPrice * 1.10
      WHERE ProductNumber LIKE @Product
      OPTION (OPTIMIZE FOR (@Product = 'BK-%') );
      GO你查过联机丛书没?
      

  11.   

    一般我不建议用Query Option,因为将来升级的时候可能会出现问题。
      

  12.   


    和在一般的select语句中是一样的,比如:select * into temp_objects
    from sys.objectsupdate temp_objects
    set name = name + '1'
    option(maxdop 2)