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

全國咨詢/投訴熱線:400-618-4000

如何優(yōu)化數(shù)據(jù)庫的查詢提高查詢效率?

更新時間:2021年05月11日16時55分 來源:傳智教育 瀏覽次數(shù):

傳智教育-一樣的教育,不一樣的品質(zhì)


數(shù)據(jù)庫優(yōu)化查詢可以在查詢語句、索引、使用臨時表等方面進(jìn)行操作,具體如下:
(1)對查詢進(jìn)行優(yōu)化,應(yīng)盡量避免全表掃描,應(yīng)先考慮在 where 或 order by 涉及的列上建立索引。
(2)應(yīng)盡量避免在 where 子句中對字段進(jìn)行 null 值判斷。
(3)并非所有索引對查詢都有效,SQL是根據(jù)表中數(shù)據(jù)來進(jìn)行查詢優(yōu)化的,當(dāng)索引列有大量數(shù)據(jù)重復(fù)時,查詢可能不會去利用索引。
(4)索引并不是越多越好,索引固然可以提高相應(yīng)的 select 的效率,但同時也降低了 insert 及 update 的效率,因?yàn)?insert 或 update 時有可能會重建索引,所以怎樣建索引需要慎重考慮,視具體情況而定。一個表的索引數(shù)最好不要超過6個,若太多則應(yīng)考慮一些不常使用到的列上建的索引是否有必要。
(5)應(yīng)盡可能的避免更新索引數(shù)據(jù)列,因?yàn)樗饕龜?shù)據(jù)列的順序就是表記錄的物理存儲順序,一旦該列值改變將導(dǎo)致整個表記錄的順序的調(diào)整,會耗費(fèi)相當(dāng)大的資源。若應(yīng)用系統(tǒng)需要頻繁更新索引數(shù)據(jù)列,那么需要考慮是否應(yīng)將該索引建為索引。
(6)盡量使用數(shù)字型字段,若只含數(shù)值信息的字段盡量不要設(shè)計為字符型,這會降低查詢和連接的性能,并會增加存儲開銷。這是因?yàn)橐嬖谔幚聿樵兒瓦B接時會逐個比較字符串中每一個字符,而對于數(shù)字型而言只需要比較一次就夠了。
(7)盡可能的使用 varchar/nvarchar 代替 char/nchar ,因?yàn)樽冮L字段存儲空間小,可以節(jié)省存儲空間,其次對于查詢來說,在一個相對較小的字段內(nèi)搜索效率顯然要高些。

優(yōu)化查詢.jpg


(8)避免頻繁創(chuàng)建和刪除臨時表,以減少系統(tǒng)表資源的消耗。
(9)臨時表并不是不可使用,適當(dāng)?shù)厥褂盟鼈兛梢允鼓承├谈行?,例如,?dāng)需要重復(fù)引用大型表或常用表中的某個數(shù)據(jù)集時。但是,對于一次性事件,最好使用導(dǎo)出表。
(10)在新建臨時表時,如果一次性插入數(shù)據(jù)量很大,那么可以使用 select into 代替 create table,避免造成大量 log ,以提高速度;如果數(shù)據(jù)量不大,為了緩和系統(tǒng)表的資源,應(yīng)先create table,然后insert。
(11)如果使用到了臨時表,在存儲過程的最后務(wù)必將所有的臨時表顯式刪除,先 truncate table ,然后 drop table ,這樣可以避免系統(tǒng)表的較長時間鎖定。





   

猜你喜歡:

HBase數(shù)據(jù)庫是怎樣存儲數(shù)據(jù)的?

Redis、傳統(tǒng)數(shù)據(jù)庫、HBase以及Hive的區(qū)別

MySQL數(shù)據(jù)庫常用命令匯總【Python進(jìn)階教程】

傳智教育Python+大數(shù)據(jù)開發(fā)培訓(xùn)

0 分享到:
和我們在線交談!