天天躁日日躁狠狠躁AV麻豆-天天躁人人躁人人躁狂躁-天天澡夜夜澡人人澡-天天影视香色欲综合网-国产成人女人在线视频观看-国产成人女人视频在线观看

有關(guān)T-SQL的10個(gè)好習(xí)慣

  1. 在生產(chǎn)環(huán)境中不要出現(xiàn)Select *

  這一點(diǎn)我想大家已經(jīng)是比較熟知了,這樣的錯(cuò)誤相信會(huì)犯的人不會(huì)太多。但我這里還是要說一下。

  不使用Select *的原因主要不是坊間所流傳的將*解析成具體的列需要產(chǎn)生消耗,這點(diǎn)消耗在我看來完全可以忽略不計(jì)。更主要的原因來自以下兩點(diǎn):

  • 擴(kuò)展方面的問題
  • 造成額外的書簽查找或是由查找變?yōu)閽呙?/li>

  擴(kuò)展方面的問題是當(dāng)表中添加一個(gè)列時(shí),Select *會(huì)把這一列也囊括進(jìn)去,從而造成上面的第二種問題。

  而額外的IO這點(diǎn)顯而易見,當(dāng)查找不需要的列時(shí)自然會(huì)產(chǎn)生不必要的IO,下面我們通過一個(gè)非常簡(jiǎn)單的例子來比較這兩種差別,如圖1所示。

1圖1.*帶來的不必要的IO

  2. 聲明變量時(shí)指定長(zhǎng)度

  這一點(diǎn)有時(shí)候會(huì)被人疏忽,因?yàn)閷?duì)于T-SQL來說,如果對(duì)于變量不指定長(zhǎng)度,則默認(rèn)的長(zhǎng)度會(huì)是1。考慮下面這個(gè)例子,如圖2所示。

2圖2.不指定變量長(zhǎng)度有可能導(dǎo)致丟失數(shù)據(jù)

  3. 使用合適的數(shù)據(jù)類型

  合適的數(shù)據(jù)類型首先是從性能角度考慮,關(guān)于這一點(diǎn),我寫過一篇文章詳細(xì)的介紹過,有興趣可以閱讀:對(duì)于表列數(shù)據(jù)類型選擇的一點(diǎn)思考,這里我就不再細(xì)說了

  不要使用字符串類型存儲(chǔ)日期數(shù)據(jù),這一點(diǎn)也需要強(qiáng)調(diào)一些,有時(shí)候你可能需要定義自己的日期格式,但這樣做非常不好,不僅是性能上不好,并且內(nèi)置的日期時(shí)間函數(shù)也不能用了。

  4. 使用Schema前綴來選擇表

  解析對(duì)象的時(shí)候需要更多的步驟,而指定Schema.Table這種方式就避免了這種無謂的解析。

  不僅如此,如果不指定Schema容易造成混淆,有時(shí)會(huì)報(bào)錯(cuò)。

  還有一點(diǎn)是,Schema使用的混亂有可能導(dǎo)致更多的執(zhí)行計(jì)劃緩存,換句話說,就是同樣一份執(zhí)行計(jì)劃被多次緩存,讓我們來看圖3的例子。

3圖3.不同的schema選擇不同導(dǎo)致同樣的查詢被多次緩存

  5. 命名規(guī)范很重要

  推薦使用實(shí)體對(duì)象+操作這種方式,比如Customer_Update這種方式。在一個(gè)大型一點(diǎn)的數(shù)據(jù)庫(kù)會(huì)存在很多存儲(chǔ)過程,不同的命名方式使得找到需要的存儲(chǔ)過程變得很不方便。因此有可能造成另一種問題,就是重復(fù)創(chuàng)建存儲(chǔ)過程,比如上面這個(gè)例子,有可能命名規(guī)范不統(tǒng)一的情況下又創(chuàng)建了一個(gè)叫UpdateCustomer的存儲(chǔ)過程。

  6. 插入大量數(shù)據(jù)時(shí),盡量不要使用循環(huán),可以使用CTE,如果要使用循環(huán),也放到一個(gè)事務(wù)中

  這點(diǎn)其實(shí)顯而易見。SQL Server是隱式事務(wù)提交的,所以對(duì)于每一個(gè)循環(huán)中的INSERT,都會(huì)作為一個(gè)事務(wù)提交。這種效率可想而知,但如果將1000條語句放到一個(gè)事務(wù)中提交,效率無疑會(huì)提升不少。

  打個(gè)比方,去銀行存款,是一次存1000效率高,還是存10次100?

  7. where條件之后盡量減少使用函數(shù)或數(shù)據(jù)類型轉(zhuǎn)換

  換句話說,WHERE條件之后盡量可以使用可以嗅探參數(shù)的方式,比如說盡量少用變量,盡量少用函數(shù),下面我們通過一個(gè)簡(jiǎn)單的例子來看這之間的差別。如圖4所示。

4圖4.在Where中使用不可嗅探的參數(shù)導(dǎo)致的索引查找

  對(duì)于另外一些情況來說,盡量不要讓參數(shù)進(jìn)行類型轉(zhuǎn)換,再看一個(gè)簡(jiǎn)單的例子,我們可以看出在Where中使用隱式轉(zhuǎn)換代價(jià)巨大。如圖5所示。

5圖5.隱式轉(zhuǎn)換帶來的性能問題

  8. 不要使用舊的連接方式,比如(from x,y,z)

  可能導(dǎo)致效率底下的笛卡爾積,當(dāng)你看到下面這個(gè)圖標(biāo)時(shí),說明查詢分析器無法根據(jù)統(tǒng)計(jì)信息估計(jì)表中的數(shù)據(jù)結(jié)構(gòu),所以無法使用Loop join, merge Join和Hash Join中的一種,而是使用效率地下的笛卡爾積。

image  所以,盡量使用Inner join的方式替代from x, y, z這種方式。

  9. 使用游標(biāo)時(shí),加上只讀只進(jìn)選項(xiàng)

  首先,我的觀點(diǎn)是:游標(biāo)是邪惡的,盡量少用。但是如果一定要用的話,請(qǐng)記住,默認(rèn)設(shè)置游標(biāo)是可進(jìn)可退的,如果你僅僅設(shè)置了

declare c cursorfor 

it知識(shí)庫(kù)有關(guān)T-SQL的10個(gè)好習(xí)慣,轉(zhuǎn)載需保留來源!

鄭重聲明:本文版權(quán)歸原作者所有,轉(zhuǎn)載文章僅為傳播更多信息之目的,如作者信息標(biāo)記有誤,請(qǐng)第一時(shí)間聯(lián)系我們修改或刪除,多謝。

主站蜘蛛池模板: 国产亚洲精品AV麻豆狂野 | 欧美日韩中文在线字幕视频 | 成人a视频在线观看 | 成人女人A级毛片免费软件 成人免费在线视频 | 久久中文字幕人妻熟AV女蜜柚M | 夜色私人影院永久入口 | 人人爽天天碰狠狠添 | 欧美片内射欧美美美妇 | 日韩精品免费一区二区 | 成人影院午夜久久影院 | 欧美亚洲视频在线二区 | 国产精品一区二区AV交换 | 亚洲黄网站wwwwww | 2022久久精品国产色蜜蜜麻豆 | 大中国免费视频大全在线观看 | jk制服喷水 | 中文字幕日本在线mv视频精品 | 男人插女人动态图 | 最近中文字幕2019国语4 | YELLOW视频在线观看大全 | 久久国产精品福利影集 | 爱穿丝袜的麻麻3d漫画免费 | 国产又黄又粗又爽又色的视频软件 | 黄片在线观看 | 真人做受120分钟免费看 | 国产成人在线播放 | 久久人妻少妇嫩草AV無碼 | 久久毛片免费看一区二区三区 | 无码99久热只有精品视频在线 | 久久91精品久久久久久水蜜桃 | 午夜在线观看免费完整直播网页 | 91精品国产免费入口 | 精品无人区麻豆乱码无限制 | 午夜免费福利 | 国产亚洲视频在线播放香蕉 | 边摸边吃奶边做激情叫床视 | 中国xxx视频 | 国产亚洲精品久久777777 | 国产成人综合高清在线观看 | 污到湿的爽文免费阅读 | 热の中文 AV天堂 |