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