日日操夜夜添-日日操影院-日日草夜夜操-日日干干-精品一区二区三区波多野结衣-精品一区二区三区高清免费不卡

公告:魔扣目錄網(wǎng)為廣大站長提供免費收錄網(wǎng)站服務(wù),提交前請做好本站友鏈:【 網(wǎng)站目錄:http://www.ylptlb.cn 】, 免友鏈快審服務(wù)(50元/站),

點擊這里在線咨詢客服
新站提交
  • 網(wǎng)站:51998
  • 待審:31
  • 小程序:12
  • 文章:1030137
  • 會員:747


從ORM框架,聊一聊數(shù)據(jù)庫的設(shè)計

 

淺談ORM

我是搞C#的菜鳥(別噴),但是編程思想都是想通的。何不如聽一聽我這個C#程序員的編程思考呢?

只接觸過EF和SqlSugar,正在做的項目用到的就是國產(chǎn)的SqlSugar,個人感覺寫法還可以。現(xiàn)在的開發(fā)基本上很少還有寫原生sql的了,因為ORM框架不僅能提高開發(fā)效率,而且還能支持各種數(shù)據(jù)庫,避免了原生sql在更換數(shù)據(jù)庫時的尷尬。但是說白了ORM框架最終也是將object轉(zhuǎn)換成sql語句,不過感覺他應(yīng)該不會給你優(yōu)化sql吧。當(dāng)遇到一些復(fù)雜查詢的時候,比如多個表關(guān)聯(lián)、各種子查詢混在一起的時候,框架就顯得有點乏力,感覺很死板。

在程序方面,就拿C#來說吧,當(dāng)查詢少量數(shù)據(jù)時,ORM框架肯定是沒問題,方便高效。如果操作的數(shù)據(jù)量過大,那肯定會有一些弊端,相對于ADO來說還是顯得比較死板,沒有原生sql靈活,能夠適應(yīng)各種復(fù)雜多變的場景。在查詢時要合理利用內(nèi)存,該緩存的緩存,不要把所有的數(shù)據(jù)讀到內(nèi)存再做業(yè)務(wù)處理,而應(yīng)該是動態(tài)的邊讀邊處理。

總而言之,言而總之,這是我在項目中使用ORM框架時的一點理解。不過現(xiàn)在做的項目一般不可能在去拼寫sql了,但是我還是覺得還是應(yīng)該了解一些sql方面的優(yōu)化。

一、表設(shè)計

1、在設(shè)計字段類型時,如果某個字段只包含數(shù)字,盡量就設(shè)計為數(shù)值類型,不要設(shè)計成字符類型,否則會影響查詢和連接的性能。

2、盡量使用varchar或nvarchar代替char和nchar,因為varchar和nvarchar類型長,存儲空間小,可以節(jié)省存儲空間,而且對于查詢來說,在一個存儲空間相對較小的字段內(nèi)搜索效率要高一些。

3、在數(shù)據(jù)量不是很大,使用觸發(fā)器或自定義函數(shù)時,最好是使用表變量,如果是數(shù)據(jù)量較大可以使用臨時表。因為臨時表是利用了硬盤,而表變量是占用了內(nèi)存,因此小數(shù)據(jù)量當(dāng)然是內(nèi)存中的表變量更快。而且在存儲過程中,使用表變量與使用臨時表相比,減少了存儲過程的重新編譯量;如果使用到了臨時表,在存儲過程的最后務(wù)必將所有的臨時表顯式刪除,先 truncate table ,然后 drop table ,這樣可以避免系統(tǒng)表的較長時間鎖定。

二、索引

1、在查詢時,為了避免全表掃描,應(yīng)該首先應(yīng)考慮在 where 及 order by 涉及的列上建立索引。

2、不是所有的索引都是有用的,當(dāng)索引列有大量數(shù)據(jù)重復(fù)時,查詢可能不會去利用索引,也就提高不了查詢效率。

3、索引并不是越多越好,索引在提高查詢效率的同時也降低了插入(insert)和更新(update)的效率,所以在建索引時要慎重考慮,不要放在經(jīng)常更新的字段上,一張表的索引最好不要超過6個。

三、SQL語句查詢

1、在程序中最好是不要使用select * from t;select count() from t,用具體的字段名代替“”,這樣可以減少數(shù)據(jù)負(fù)擔(dān)。如果是多表關(guān)聯(lián)查詢,不同的表存在相同名稱的字段,也會造成混淆。但如果是在后臺數(shù)據(jù)庫做臨時查詢,特別是對表字段不熟悉的時候,用select * 就比較方便了。

2、用exists和not exists代替in和not in,因為in 是把外表和內(nèi)表作hash 連接,而exists是對外表作loop循環(huán),每次loop循環(huán)再對內(nèi)表進行查詢,而且IN不對NULL進行處理,exists會對NULL值進行處理。

3、查詢時,在where字句中使用!=、<>、or、in、not in、like以及對字段進行表達(dá)式操作或函數(shù)操作時,都是進行全表掃描,雖然有些時候沒辦法避免,但是能換其他方式的,最好不要做全表掃描。

4、不要在 where 子句中的“=”左邊進行函數(shù)、算術(shù)運算或其他表達(dá)式運算,否則系統(tǒng)將可能無法正確使用索引。

5、后臺盡量不要向前臺返回大數(shù)據(jù)量,如果數(shù)據(jù)量過大,更應(yīng)該注意sql優(yōu)化,不要返回一些不需要的列,或者也該考慮考慮需求是否合理了。而且盡量避免大事務(wù)操作,提高系統(tǒng)的并發(fā)能力。

尾聲

大家都是搞后端業(yè)務(wù)的,雖然業(yè)務(wù)不盡相同。但對數(shù)據(jù)庫的使用來說,都是CURD(雖然有些絕對,哈哈)。更好的理解數(shù)據(jù)庫,不光對個人技術(shù)有幫助,長遠(yuǎn)來說對業(yè)務(wù)對發(fā)展都有提升~

分享到:
標(biāo)簽:框架 ORM
用戶無頭像

網(wǎng)友整理

注冊時間:

網(wǎng)站:5 個   小程序:0 個  文章:12 篇

  • 51998

    網(wǎng)站

  • 12

    小程序

  • 1030137

    文章

  • 747

    會員

趕快注冊賬號,推廣您的網(wǎng)站吧!
最新入駐小程序

數(shù)獨大挑戰(zhàn)2018-06-03

數(shù)獨一種數(shù)學(xué)游戲,玩家需要根據(jù)9

答題星2018-06-03

您可以通過答題星輕松地創(chuàng)建試卷

全階人生考試2018-06-03

各種考試題,題庫,初中,高中,大學(xué)四六

運動步數(shù)有氧達(dá)人2018-06-03

記錄運動步數(shù),積累氧氣值。還可偷

每日養(yǎng)生app2018-06-03

每日養(yǎng)生,天天健康

體育訓(xùn)練成績評定2018-06-03

通用課目體育訓(xùn)練成績評定