最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

通過(guò)使用正確的search arguments來(lái)提高SQL Server數(shù)據(jù)庫(kù)的性能

 更新時(shí)間:2016年11月17日 16:32:50   作者:Wei.T  
今天通過(guò)本文給大家介紹在SQL Server上關(guān)于indexing的一個(gè)特定的性能問(wèn)題,本文給大家介紹的非常詳細(xì),具有參考借鑒價(jià)值,感興趣的朋友可以參考下

原文地址:http://www.sqlpassion.at/archive/2014/04/08/improving-query-performance-by-using-correct-search-arguments/

今天的文章給大家談?wù)勗赟QL Server上關(guān)于indexing的一個(gè)特定的性能問(wèn)題。

問(wèn)題

看看下面的簡(jiǎn)單的query語(yǔ)句,可能你已經(jīng)在你看到過(guò)幾百次了

-- Results in an Index Scan
SELECT * FROM Sales.SalesOrderHeader
WHERE YEAR(OrderDate) = 2005 AND MONTH(OrderDate) = 7
GO

上門(mén)的代碼查詢一個(gè)銷(xiāo)售信息,需要一個(gè)特定的月份和年份的,這不是很復(fù)雜。但是不幸的的事,這個(gè)qeury的效率不行,即使OrderDate這一列已經(jīng)做了Non-Clustered Index??梢钥纯聪旅娴膓eury執(zhí)行圖,你能看到Query Optimizer已經(jīng)選擇了定義在列OrderDate下的Non-Clustered Index,但是SQL Server卻做了Index的一個(gè)完整掃描,而不是期待中的Seek operation。

這實(shí)際上不是SQL Server的限制,而是relational database都是這樣的。只要你對(duì)一個(gè)做了index的列(Search Argument)加了函數(shù)操作,數(shù)據(jù)庫(kù)引擎就必須再次掃描這個(gè)index,而不是去直接執(zhí)行seek operation

解決方案

為了解決上門(mén)的問(wèn)題,必須要避免在列上門(mén)直接應(yīng)該函數(shù),比如上面的問(wèn)題可以用下面的代碼來(lái)代替

-- Results in an Index Seek
SELECT * FROM Sales.SalesOrderHeader
WHERE OrderDate >= '20050701' AND OrderDate < '20050801'
GO

我們重寫(xiě)的這個(gè)query語(yǔ)句,能達(dá)到同樣的效果,不用函數(shù)MONTH了。從此query的執(zhí)行圖來(lái)看,SQL Server執(zhí)行了seek operation,在查詢的范圍內(nèi)進(jìn)行的scan。所以,如果你要在where查詢中用到函數(shù),用到表達(dá)式的右側(cè),來(lái)避免性能問(wèn)題。比如下面的例子。

-- Results in an Index Scan
SELECT * FROM Sales.SalesOrderHeader
WHERE CAST(CreditCardID AS CHAR(4)) = '1347'
GO

這個(gè)query會(huì)使SQL Server掃描了整個(gè)Non-Clustered Index。所以當(dāng)表變得更大的時(shí)候,這個(gè)擴(kuò)展性等各方面就很差了。如果把函數(shù)放在表達(dá)式的右側(cè),SQL Server就能執(zhí)行seek operation了

-- Results in an Index Seek
SELECT * FROM Sales.SalesOrderHeader
WHERE CreditCardID = CAST('1347' AS INT)
GO

總結(jié)

通過(guò)今天的blog,我想你們已經(jīng)認(rèn)識(shí)到了不要在做過(guò)indexed的列上直接應(yīng)用函數(shù),不然SQL Server會(huì)掃描你整個(gè)index,而不是做seek operation。當(dāng)你的表變得越來(lái)越大的時(shí),你會(huì)崩潰的。

譯后記

這也是我在看微軟SQL Server認(rèn)證考試Exam70-461的TrainingKit的時(shí)候,它書(shū)里面反復(fù)強(qiáng)調(diào)的。簡(jiǎn)單來(lái)講就是保證不要直接用函數(shù)作用在做過(guò)index的列上,要用函數(shù)的話,變通到表達(dá)式的右側(cè)來(lái)。至于為什么會(huì)影響性能。因?yàn)槲覍?duì)index還不熟悉,我理解的不是很清晰。

我大概猜想如下,先記下,歡迎討論。

對(duì)某一個(gè)列做index,是不是類似對(duì)這一列的數(shù)據(jù)做一個(gè)hash映射,當(dāng)在查找這一列的數(shù)據(jù)的時(shí)候,直接可以做O(1)的操作(是不是就是它講的seek operation)。如果對(duì)這一列使用了函數(shù),SQL Server的機(jī)制就是不會(huì)重新做一個(gè)作用了函數(shù)后的列的hash,它就簡(jiǎn)單的一個(gè)一個(gè)的比較了。是O(N)的操作了。

相關(guān)文章

  • SQL?Server?2012?搭建數(shù)據(jù)庫(kù)AlwaysOn(數(shù)據(jù)庫(kù)高可用集群)

    SQL?Server?2012?搭建數(shù)據(jù)庫(kù)AlwaysOn(數(shù)據(jù)庫(kù)高可用集群)

    這篇文章主要介紹了SQL?Server?2012?搭建數(shù)據(jù)庫(kù)AlwaysOn(數(shù)據(jù)庫(kù)高可用集群),需要的朋友可以參考下
    2023-05-05
  • 分組后分組合計(jì)以及總計(jì)SQL語(yǔ)句(稍微整理了一下)

    分組后分組合計(jì)以及總計(jì)SQL語(yǔ)句(稍微整理了一下)

    這篇文章主要介紹了分組后分組合計(jì)以及總計(jì)SQL語(yǔ)句,需要的朋友可以參考下
    2017-02-02
  • 配置SQL Server數(shù)據(jù)庫(kù)恢復(fù)模式(2種方法)

    配置SQL Server數(shù)據(jù)庫(kù)恢復(fù)模式(2種方法)

    這篇文章主要介紹了配置SQL Server數(shù)據(jù)庫(kù)恢復(fù)模式的兩種方法,需要了解的朋友可以參考下
    2015-10-10
  • SQL的Join使用圖解教程

    SQL的Join使用圖解教程

    對(duì)于SQL的Join,在學(xué)習(xí)起來(lái)可能是比較亂的。我們知道,SQL的Join語(yǔ)法有很多inner的,有outer的,有l(wèi)eft的,有時(shí)候,對(duì)于Select出來(lái)的結(jié)果集是什么樣子有點(diǎn)不是很清楚
    2012-08-08
  • MSSQL存儲(chǔ)過(guò)程的功能和用法詳解

    MSSQL存儲(chǔ)過(guò)程的功能和用法詳解

    Microsoft SQL Server(MSSQL)是一個(gè)關(guān)系型數(shù)據(jù)庫(kù)管理系統(tǒng),它支持各種數(shù)據(jù)操作和查詢功能,其中,存儲(chǔ)過(guò)程是MSSQL中非常重要的一個(gè)功能,在這個(gè)章節(jié)中,我們將詳細(xì)介紹MSSQL存儲(chǔ)過(guò)程的功能和用法
    2023-12-12
  • sql 函數(shù)大全 比較常用的一些函數(shù)整理

    sql 函數(shù)大全 比較常用的一些函數(shù)整理

    學(xué)習(xí)sqlserver的朋友,可以參考下,掌握這些函數(shù)可以方便的對(duì)字段的字符進(jìn)行處理。
    2010-04-04
  • sql server性能調(diào)優(yōu) I/O開(kāi)銷(xiāo)的深入解析

    sql server性能調(diào)優(yōu) I/O開(kāi)銷(xiāo)的深入解析

    這篇文章主要給大家介紹了關(guān)于sql server性能調(diào)優(yōu) I/O開(kāi)銷(xiāo)的相關(guān)資料,文中通過(guò)示例代碼以及圖片介紹的非常詳細(xì),對(duì)大家的理解和學(xué)習(xí)具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2018-07-07
  • 淺析SQL語(yǔ)句中GROUP BY的用法

    淺析SQL語(yǔ)句中GROUP BY的用法

    “Group By”從字面意義上理解就是根據(jù)“By”指定的規(guī)則對(duì)數(shù)據(jù)進(jìn)行分組,所謂的分組就是將一個(gè)“數(shù)據(jù)集”劃分成若干個(gè)“小區(qū)域”,然后針對(duì)若干個(gè)“小區(qū)域”進(jìn)行數(shù)據(jù)處理。
    2014-08-08
  • SQL Server數(shù)據(jù)庫(kù)備份加密的方法詳解

    SQL Server數(shù)據(jù)庫(kù)備份加密的方法詳解

    在數(shù)據(jù)即資產(chǎn)的今天,保護(hù)數(shù)據(jù)庫(kù)備份免受未授權(quán)訪問(wèn)是至關(guān)重要的,SQL Server提供了強(qiáng)大的安全特性,包括對(duì)數(shù)據(jù)庫(kù)備份進(jìn)行加密的能力,本文將深入探討如何在SQL Server中實(shí)現(xiàn)數(shù)據(jù)庫(kù)的自定義數(shù)據(jù)備份加密,需要的朋友可以參考下
    2024-08-08
  • 教你幾種在SQLServer中刪除重復(fù)數(shù)據(jù)方法

    教你幾種在SQLServer中刪除重復(fù)數(shù)據(jù)方法

    數(shù)據(jù)庫(kù)的使用過(guò)程中由于程序方面的問(wèn)題有時(shí)候會(huì)碰到重復(fù)數(shù)據(jù),重復(fù)數(shù)據(jù)導(dǎo)致了數(shù)據(jù)庫(kù)部分設(shè)置不能正確設(shè)置……
    2010-04-04

最新評(píng)論

城固县| 隆尧县| 永仁县| 泸定县| 友谊县| 宁都县| 大英县| 山西省| 平南县| 阳泉市| 莆田市| 夏津县| 明星| 神农架林区| 西峡县| 蒙自县| 观塘区| 黄山市| 建德市| 南陵县| 宜黄县| 萝北县| 佛学| 尉犁县| 鸡西市| 博客| 台东市| 新昌县| 杭锦后旗| 临漳县| 台州市| 彰化县| 镶黄旗| 东乌| 乐山市| 清流县| 昌平区| 宣武区| 湘潭县| 南投县| 林甸县|