教育行業(yè)A股IPO第一股(股票代碼 003032)

全國(guó)咨詢/投訴熱線:400-618-4000

怎樣優(yōu)化數(shù)據(jù)庫(kù)?提高數(shù)據(jù)庫(kù)的性能?【軟件測(cè)試面試題】

更新時(shí)間:2021年10月08日17時(shí)56分 來(lái)源:傳智教育 瀏覽次數(shù):

好口碑IT培訓(xùn)

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

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

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

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

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

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

2. 避免使用不兼容的數(shù)據(jù)類型

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

例如:

SELECT name FROM employee WHERE salary > 60000

在這條語(yǔ)句中,如 salary 字段是 money 型的,則優(yōu)化器很難對(duì)其進(jìn)行優(yōu)化,因?yàn)?60000 是個(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.避免使用!=或<>、IS NULL 或 IS NOT NULL、IN ,NOT IN 等這樣的操作符

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

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

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

8.分利用連接條件

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

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

11. 使用視圖加速查詢

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

13. DISTINCT 的就不用 GROUP BY

14. 部分利用索引

15. 能用 UNION ALL 就不要用 UNION

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

17. 盡量不要用 SELECT INTO 語(yǔ)句

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

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

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

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

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

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

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

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







猜你喜歡:

數(shù)據(jù)庫(kù)模型的研究可以分成幾個(gè)階段?

數(shù)據(jù)庫(kù)優(yōu)化策略有哪些?

Mybatis原理介紹:MyBatis如何操作數(shù)據(jù)庫(kù)?

如何快速入門Jmeter直連數(shù)據(jù)庫(kù)?

傳智教育軟件測(cè)試培訓(xùn)班

0 分享到:
和我們?cè)诰€交談!