千鋒教育-做有情懷、有良心、有品質(zhì)的職業(yè)教育機(jī)構(gòu)

手機(jī)站
千鋒教育

千鋒學(xué)習(xí)站 | 隨時(shí)隨地免費(fèi)學(xué)

千鋒教育

掃一掃進(jìn)入千鋒手機(jī)站

領(lǐng)取全套視頻
千鋒教育

關(guān)注千鋒學(xué)習(xí)站小程序
隨時(shí)隨地免費(fèi)學(xué)習(xí)課程

當(dāng)前位置:首頁  >  應(yīng)聘面試  >  Python面試題  > 優(yōu)化數(shù)據(jù)庫?提高數(shù)據(jù)庫的性能

優(yōu)化數(shù)據(jù)庫?提高數(shù)據(jù)庫的性能

來源:千鋒教育
發(fā)布人:wjy
時(shí)間: 2022-08-22 14:36:01 1661150161

1.對(duì)語句的優(yōu)化

①用程序中,保證在實(shí)現(xiàn)功能的基礎(chǔ)上,盡量減少對(duì)數(shù)據(jù)庫的訪問次數(shù); 通過搜索參數(shù),盡量減少對(duì)表的訪問行數(shù),最小化結(jié)果集,從而減輕網(wǎng)絡(luò)負(fù)擔(dān); 

②能夠分開的操作盡量分開處理,提高每次的響應(yīng)速度;在數(shù)據(jù)窗口使用SQL時(shí),盡量把使用的索引放在選擇的首列;算法的結(jié)構(gòu)盡量簡(jiǎn)單;

③在查詢時(shí),不要過多地使用通配符如 SELECT * FROM T1 語句,要用到幾列就選擇幾列如: SELECT COL1,COL2FROM T1; 

④在可能的情況下盡量限制盡量結(jié)果集行數(shù)如:SELECT TOP 300 COL1,COL2,COL3FROM T1,因?yàn)槟承┣闆r下用戶是不需要那么多的數(shù)據(jù)的。

⑤不要在應(yīng)用中使用數(shù)據(jù)庫游標(biāo),游標(biāo)是非常有用的工具,但比使用常規(guī)的、面向集的SQL語句需要更大的開銷;按照特定順序提取數(shù)據(jù)的查找。

2. 避免使用不兼容的數(shù)據(jù)類型 例如float和int、char和varchar、binary和varbinary是不兼容的。數(shù)據(jù)類型的不兼容可能使優(yōu)化器無法執(zhí)行一些本來可以進(jìn)行的優(yōu)化操作。

例如: SELECT nameFROM employee WHERE salary > 60000在這條語句中,如salary字段是money型的,則優(yōu)化器很難對(duì)其進(jìn)行優(yōu)化,因?yàn)?0000是個(gè)整型數(shù)。

我們應(yīng)當(dāng)在編程時(shí)將整型轉(zhuǎn)化成為錢幣型,而不要等到運(yùn)行時(shí)轉(zhuǎn)化。若在查詢時(shí)強(qiáng)制轉(zhuǎn)換,查詢速度會(huì)明顯減慢。

3.避免在 WHERE 子句中對(duì)字段進(jìn)行函數(shù)或表達(dá)式操作。若進(jìn)行函數(shù)或表達(dá)式操作,將導(dǎo)致引擎放棄使用索引而進(jìn)行全表掃描。

4.避免使用!=或<>、ISNULL 或 IS NOT NULL、IN ,NOT IN 等這樣的操作符

5.盡量使用數(shù)字型字段

6.合理使用 EXISTS,NOTEXISTS 子句。

7.盡量避免在索引過的字符數(shù)據(jù)中,使用非打頭字母搜索。

8.分利用連接條件

9.消除對(duì)大型表行數(shù)據(jù)的順序存取

10. 避免困難的正規(guī)表達(dá)式

11. 使用視圖加速查詢

12. 能夠用BETWEEN的就不要用IN

13. DISTINCT的就不用GROUPBY

14. 部分利用索引

15. 能用UNIONALL就不要用UNION

16. 不要寫一些不做任何事的查詢

17. 盡量不要用SELECTINTO語句

18. 必要時(shí)強(qiáng)制查詢優(yōu)化器使用某個(gè)索引

19. 雖然 UPDATE、DELETE 語句的寫法基本固定,但是還是對(duì) UPDATE 語句給點(diǎn)建議:  

a) 盡量不要修改主鍵字段。 

b) 當(dāng)修改 VARCHAR 型字段時(shí),盡量使用相同長(zhǎng)度內(nèi)容的值代替。

c) 盡量最小化對(duì)于含有UPDATE觸發(fā)器的表的UPDATE操作。

d) 避免 UPDATE 將要復(fù)制到其他數(shù)據(jù)庫的列。

e) 避免 UPDATE 建有很多索引的列。

f) 避免 UPDATE 在 WHERE 子句條件中的列。

優(yōu)化數(shù)據(jù)庫?提高數(shù)據(jù)庫的性能

tags:
聲明:本站稿件版權(quán)均屬千鋒教育所有,未經(jīng)許可不得擅自轉(zhuǎn)載。
10年以上業(yè)內(nèi)強(qiáng)師集結(jié),手把手帶你蛻變精英
請(qǐng)您保持通訊暢通,專屬學(xué)習(xí)老師24小時(shí)內(nèi)將與您1V1溝通
免費(fèi)領(lǐng)取
今日已有369人領(lǐng)取成功
劉同學(xué) 138****2860 剛剛成功領(lǐng)取
王同學(xué) 131****2015 剛剛成功領(lǐng)取
張同學(xué) 133****4652 剛剛成功領(lǐng)取
李同學(xué) 135****8607 剛剛成功領(lǐng)取
楊同學(xué) 132****5667 剛剛成功領(lǐng)取
岳同學(xué) 134****6652 剛剛成功領(lǐng)取
梁同學(xué) 157****2950 剛剛成功領(lǐng)取
劉同學(xué) 189****1015 剛剛成功領(lǐng)取
張同學(xué) 155****4678 剛剛成功領(lǐng)取
鄒同學(xué) 139****2907 剛剛成功領(lǐng)取
董同學(xué) 138****2867 剛剛成功領(lǐng)取
周同學(xué) 136****3602 剛剛成功領(lǐng)取
相關(guān)推薦HOT
【Python面試題】談?wù)勀銓?duì)“猴子補(bǔ)丁”(monkey patching)的理解

“猴子補(bǔ)丁”是動(dòng)態(tài)類型語言的一個(gè)特性,代碼運(yùn)行時(shí)在不修改源代碼的前提下改變代碼中的方法、屬性、函數(shù)等以達(dá)到熱補(bǔ)丁(hot patch)的效果。詳情>>

2022-08-23 10:29:17
【Python面試題】使用Python代碼實(shí)現(xiàn)遍歷一個(gè)文件夾的操作

Python標(biāo)準(zhǔn)庫os模塊的walk函數(shù)提供了遍歷一個(gè)文件夾的功能,它返回一個(gè)生成器。import os g = os.walk('/Users/Hao/Downloads/') for path, dir...詳情>>

2022-08-23 10:29:09
【Python面試題】如何理解python中的封裝,繼承,多態(tài)的

封裝:封裝就是把對(duì)象的屬性和行為結(jié)合成一個(gè)獨(dú)立的整體,把內(nèi)部的實(shí)現(xiàn)細(xì)節(jié)隱藏起來,不能被外界所看見,調(diào)用的人只能執(zhí)行,而看不到實(shí)現(xiàn)的細(xì)節(jié)...詳情>>

2022-08-23 10:29:06
【Python面試題】運(yùn)行下面的代碼是否會(huì)報(bào)錯(cuò)

擴(kuò)展:如果不希望代碼運(yùn)行時(shí)動(dòng)態(tài)的給對(duì)象添加新屬性,可以在定義類時(shí)使用__slots__魔法。例如,我們可以在上面的A中添加一行__slots__ = ('__va...詳情>>

2022-08-23 10:29:03
【Python面試題】閱讀下面的代碼說出運(yùn)行結(jié)果。

在沒有多重繼承的情況下,向?qū)ο蟀l(fā)出一個(gè)消息,如果對(duì)象沒有對(duì)應(yīng)的方法,那么向上(父類)搜索的順序是非常清晰的。如果向上追溯到object類(所...詳情>>

2022-08-23 10:29:00
快速通道