溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點(diǎn)擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

016—優(yōu)化

發(fā)布時(shí)間:2020-07-07 12:09:22 來源:網(wǎng)絡(luò) 閱讀:179 作者:會(huì)飛的冬瓜 欄目:MySQL數(shù)據(jù)庫

一些優(yōu)化建議:


1、SELECT語句執(zhí)行性能,可以通過explain語句來查看;

2、數(shù)據(jù)庫對象存儲(chǔ)過程比單條執(zhí)行語句速度快;

3、減少select * 出現(xiàn)的頻率;

4、索引可以加速數(shù)據(jù)查詢,但對于不是經(jīng)常查找的字段或表,最好不要建立索引;

5、LIKE關(guān)鍵字執(zhí)行效率低,一般通過“FULL TEXT”代替;

6、應(yīng)盡量避免在 where 子句中使用 or 來連接條件,否則將導(dǎo)致引擎放棄使用索引而進(jìn)行全表掃描,這樣不符合優(yōu)化原則,如: 

select id from t where num=10 or num=20;

可以這樣查詢:

select id from t where num=10
union all
select id from t where num=20;

7、in 和 not in 也要慎用,否則會(huì)導(dǎo)致全表掃描,如:

select id from t where num in(1,2,3);

8、對于連續(xù)的數(shù)值,能用 between 就不要用 in 了:

select id from t where num between 1 and 3;

9、很多時(shí)候用 exists 代替 in 是一個(gè)好的選擇。 

select num from a where num in(select num from b);

用下面的語句替換:

select num from a where exists(select 1 from b where num=a.num);

10、盡量使用數(shù)字型字段,若只含數(shù)值信息的字段盡量不要設(shè)計(jì)為字符型,這會(huì)降低查詢和連接的性能,并會(huì)增加存儲(chǔ)開銷。這是因?yàn)橐嬖谔幚聿樵兒瓦B接時(shí)會(huì)逐個(gè)比較字符串中每一個(gè)字符,而對于數(shù)字型而言只需要比較一次就夠了。

 

11、盡可能的使用 varchar/nvarchar 代替 char/nchar ,因?yàn)槭紫茸冮L字段存儲(chǔ)空間小,可以節(jié)省存儲(chǔ)空間,其次對于查詢來說,在一個(gè)相對較小的字段內(nèi)搜索效率顯然要高些。

 

12、避免頻繁創(chuàng)建和刪除臨時(shí)表,以減少系統(tǒng)表資源的消耗。

 

13、在新建臨時(shí)表時(shí),如果一次性插入數(shù)據(jù)量很大,那么可以使用 select into 代替 create table,避免造成大量 log ,以提高速度;如果數(shù)據(jù)量不大,為了緩和系統(tǒng)表的資源,應(yīng)先create table,然后insert。 


14、盡量避免使用游標(biāo),因?yàn)橛螛?biāo)的效率較差,如果游標(biāo)操作的數(shù)據(jù)超過1萬行,那么就應(yīng)該考慮改寫。


15、盡量避免向客戶端返回大數(shù)據(jù)量,若數(shù)據(jù)量過大,應(yīng)該考慮相應(yīng)需求是否合理。

 


向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI