時間:2019-09-16 14:55:46 作者:無名 瀏覽量:47
大家好,小編是個電腦軟件控,數(shù)據(jù)庫表表面上存在索引和防錯機制,然而一個簡略的查詢就會消耗很長時間。Web應(yīng)用程序或許在開發(fā)環(huán)境中運轉(zhuǎn)良好,但在產(chǎn)品環(huán)境中體現(xiàn)同樣糟糕。假如你是個數(shù)據(jù)庫管理員,你很有可能現(xiàn)已在某個階段遇到上述情況。因此,本文將介紹對MySQL進行功能優(yōu)化的技巧和竅門。
MYSQL數(shù)據(jù)庫優(yōu)化性能六大技巧教程圖1
1、存儲引擎的選擇
假如數(shù)據(jù)表需求事務(wù)處理,應(yīng)該考慮運用InnoDB,由于它完全符合ACID特性。假如不需求事務(wù)處理,運用默認存儲引擎MyISAM是比較明智的。并且不要嘗試同時運用這兩個存儲引擎?紤]一下:在一個事務(wù)處理中,一些數(shù)據(jù)表運用InnoDB,而其他的運用MyISAM。成果呢?整個subject將被取消,只有那些在事務(wù)處理中的被帶回到原始狀況,其他的被提交的數(shù)據(jù)轉(zhuǎn)存,這將導(dǎo)致整個數(shù)據(jù)庫的抵觸。然而存在一個簡略的辦法能夠同時利用兩個存儲引擎的優(yōu)勢。目前大多數(shù)MySQL套件中包含InnoDB、編譯器和鏈表,但假如你選擇MyISAM,你仍然能夠單獨下載InnoDB,并把它作為一個插件。很簡略的辦法,不是嗎?
2、計數(shù)問題
假如數(shù)據(jù)表選用的存儲引擎支撐事務(wù)處理(如InnoDB),你就不該運用COUNT(*)核算數(shù)據(jù)表中的行數(shù)。這是由于在產(chǎn)品類數(shù)據(jù)庫運用COUNT(*),最多返回一個近似值,由于在某個特定時間,總有一些事務(wù)處理正在運轉(zhuǎn)。假如運用COUNT(*)顯然會產(chǎn)生bug,呈現(xiàn)這種過錯成果。
3、反復(fù)測驗查詢
查詢最扎手的問題并不是無論怎樣小心總會呈現(xiàn)過錯,并導(dǎo)致bug呈現(xiàn)。恰恰相反,問題是在大多數(shù)情況下bug呈現(xiàn)時,應(yīng)用程序或數(shù)據(jù)庫現(xiàn)已上線。確實不存在針對該問題切實可行的解決辦法,除非將測驗樣本在應(yīng)用程序或數(shù)據(jù)庫上運轉(zhuǎn)。任何數(shù)據(jù)庫查詢只有經(jīng)過上千個記載的很多樣本測驗,才干被認可。
MYSQL數(shù)據(jù)庫優(yōu)化性能六大技巧教程圖2
4、避免全表掃描
通常情況下,假如MySQL(或許其他聯(lián)系數(shù)據(jù)庫模型)需求在數(shù)據(jù)表中查找或掃描恣意特定記載時,就會用到全表掃描。此外,通常最簡略的辦法是運用索引表,以解決全表掃描引起的低效能問題。然而,正如咱們在隨后的問題中看到的,這存在過錯部分。