none
这个是什么原因呢? RRS feed

  • 问题

  • 寫了一個存儲過程ots_MAIN_TEST2011,存儲過程中間多餘的條件已經屏蔽。只留下了是否有輸入單號的判斷,請參考!
            下圖中的代碼部份,如果屏蔽 “or (select count(*) from @CPOTable )<=0”或改成常量判斷會很快,如果是這種判斷有變量就會差很多倍。

    select aa,bb,cc from dbo.xxx(nolock)
    where (exists(select * from @xxtable xxtable where xxtable.po=no)
    or (select count(*)  from @xxtable )<=0)


    If you haven't all the things you want,be grateful for the things you don't have that you didn't want.
    2011年4月20日 14:42

答案

  • select count(*)会造成表扫描,你用exists判断好了。
    想不想时已是想,不如不想都不想。
    • 已建议为答案 Ai-hua Qiu 2011年4月25日 2:38
    • 已标记为答案 Ai-hua Qiu 2011年4月27日 3:01
    2011年4月21日 5:17
    版主
  • 你好!

    你可以尝试将“or (select count(*) from @xxtable )<=0)“ 改成 “ or not exists (select * from @xxtable)“,看看效果。如果可以,最好能够提供T-SQL的执行计划信息,表格创建的DDL脚本和样本数据,以便我们进一步的分析。

    Best Regards,
    Stephanie Lv

    • 已建议为答案 Ai-hua Qiu 2011年4月25日 2:38
    • 已标记为答案 Ai-hua Qiu 2011年4月27日 3:01
    2011年4月21日 10:57

全部回复

  • select count(*)会造成表扫描,你用exists判断好了。
    想不想时已是想,不如不想都不想。
    • 已建议为答案 Ai-hua Qiu 2011年4月25日 2:38
    • 已标记为答案 Ai-hua Qiu 2011年4月27日 3:01
    2011年4月21日 5:17
    版主
  • 你好!

    你可以尝试将“or (select count(*) from @xxtable )<=0)“ 改成 “ or not exists (select * from @xxtable)“,看看效果。如果可以,最好能够提供T-SQL的执行计划信息,表格创建的DDL脚本和样本数据,以便我们进一步的分析。

    Best Regards,
    Stephanie Lv

    • 已建议为答案 Ai-hua Qiu 2011年4月25日 2:38
    • 已标记为答案 Ai-hua Qiu 2011年4月27日 3:01
    2011年4月21日 10:57