亚洲免费在线视频-亚洲啊v-久久免费精品视频-国产精品va-看片地址-成人在线视频网

您的位置:首頁技術文章
文章詳情頁

SQL Server 中Inner join 和where的效率差異

瀏覽:144日期:2023-11-01 17:28:41

今天,手頭上正在作的一個項目,在生成報表時,客戶感覺太慢,于是,各處檢查,看可否提示效率。界面上的都改進了,提升不大。如是在SQL 語句上下功夫。(我這人比較懶,對簡單的語句和查詢都沒有經過仔細優化的,一般只對姚使用left join,outer join,group by 以及carsor的語句會仔細寫并用數據庫理論考慮和檢查---因為這種語句一般測試時如果發現錯誤,檢查和調試很麻煩)

先在網上Google搜索“Join 與 Where 效率”以及察看SQL Server 幫助文檔,希望能獲得“捷徑”些的優化思路。

搜索的結果是,各大論壇,包括MSDN上很多人提出了這個問題,但回答是眾說紛紜。總體上總結出來時說:對小數據量(<N萬)的來說效率幾乎無差異,更有說法說Inner join 和Where只是SQL標準不同,在查詢分析器中SQL Server查詢分析器是將Where直接轉換為Join后查詢的。

還是自己來做試驗吧。

如是有了如下比較結果(均在查詢分析器中查詢和計時):

語句(1)declare @operatorName nvarchar(50)set @operatorName = '%'

select distinct item.*; from item , customer_item , customer_operator ,operatorwhere item.itemcode = customer_item.itemCode and customer_item.customerCode =; customer_operator.customerCodeand customer_operator.operatorId =; customer_operator.operatorIdand operator.operatorName like @operatorNameand item.deleted = 0 and customer_item.deleted = 0 and customer_operator.deleted = 0查詢結果,74行,共時間0:00:04

語句(2)declare @operatorName nvarchar(50)

set @operatorName = '%'

select distinct item.*; from item inner join; customer_item on; item.itemcode = customer_item.itemCode inner join customer_operator on customer_item.customerCode = customer_operator.customerCodeinner join operator on customer_operator.operatorId = operator.operatorIdwhere; operator.operatorName like @operatorNameand item.deleted = 0 and customer_item.deleted = 0 and customer_operator.deleted = 0共74行,時間0:00:01

后檢查發現語句(1)中有一個重復自查詢條件 :customer_operator.operatorId =; customer_operator.operatorId將其葉加到語句2中,語句(3)declare @operatorName nvarchar(50)

set @operatorName = '%'

select distinct item.*; from item inner join; customer_item on; item.itemcode = customer_item.itemCode inner join customer_operator on customer_item.customerCode = customer_operator.customerCodeinner join operator on customer_operator.operatorId = operator.operatorIdwhere; operator.operatorName like @operatorNameand item.deleted = 0 and customer_item.deleted = 0 and customer_operator.deleted = 0and customer_operator.operatorId =; customer_operator.operatorId

所用時間和結果都為74行,時間0:00:01。

將語句(1)中的去掉該條件后成為語句(4)declare @operatorName nvarchar(50)set @operatorName = '%'

select distinct item.*; from item , customer_item , customer_operator ,operatorwhere item.itemcode = customer_item.itemCode and customer_item.customerCode =; customer_operator.customerCode--and customer_operator.operatorId =; customer_operator.operatorIdand operator.operatorName like @operatorNameand item.deleted = 0 and customer_item.deleted = 0 and customer_operator.deleted = 0

時間和結果為74行,時間0:00:01。

終于發現了些他們的差異。

結論: 盡量使用Join 而不是Where來列出關聯條件,特別是多個表聯合的時候。原因是: (1)在效率上,Where可能具有和Inner join一樣的效率。但基本可以肯定的(通過SQLServer幫助和其它資料,以及本測試)是Join的效率不比Where差。 (2)使用Join可以幫助檢查語句中的無效或者誤寫的關聯條件

標簽: Sql Server 數據庫
主站蜘蛛池模板: 国产欧美日韩精品第三区 | 在线视频精品一区 | 久久精品免费观看国产软件 | 一个人的视频日本免费 | 日韩在线 | 中文 | 国产理论最新国产精品视频 | 国产91精品露脸国语对白 | 国产欧美日韩不卡一区二区三区 | 亚洲成a人在线观看 | 亚洲精品国产男人的天堂 | 久久久久亚洲国产 | 中文国产成人精品久久一 | 99在线热视频 | 欧美专区视频 | 国产精品午夜性视频 | 26uuu天天夜夜综合 | 亚洲在线欧美 | 手机看片久久青草福利盒子 | 2021最新国产精品一区 | 草草草在线视频 | 青青草国产免费一区二区 | 亚洲国产精品网站久久 | 亚洲国产欧美精品一区二区三区 | 一级欧美一级日韩片 | 国产精品久久久久久福利漫画 | 97se亚洲综合在线韩国专区福利 | 国产成人啪精品视频免费软件 | 欧美精品人爱c欧美精品 | 99久久精品免费精品国产 | 精品久久中文字幕有码 | 香港国产特级一级毛片 | 成人免费观看高清在线毛片 | 欧美一级毛片aaa片 欧美一级毛片不卡免费观看 | 亚洲va在线va天堂va四虎 | 国产v日韩v欧美v精品专区 | 国产乱码精品一区二区三区四川人 | 久久精品视频网 | 日本αv| 久久久久久全国免费观看 | 成人观看免费大片在线观看 | 久久久久久一品道精品免费看 |