MySQL性能優(yōu)化的一些技巧幫助你的數(shù)據(jù)庫(kù)
你完成了你的品牌新的應(yīng)用程序,一切工作就像一個(gè)魅力。用戶來(lái)使用你的網(wǎng)絡(luò)。每個(gè)人是幸福的。
然后,突然間,一個(gè)大爆發(fā)的用戶你的MySQL服務(wù)器,您的網(wǎng)站已關(guān)閉。出了什么問(wèn)題?你怎么能阻止它嗎?
以下是MySQL性能優(yōu)化的一些技巧,將幫助你,幫助你的數(shù)據(jù)庫(kù)。
大處著眼
在早期的發(fā)展階段,你應(yīng)該知道預(yù)期到您的應(yīng)用程序的用戶數(shù)。如果你希望很多用戶來(lái)說(shuō),你應(yīng)該想想大,從一開(kāi)始,計(jì)劃進(jìn)行復(fù)制,可擴(kuò)展性和性能。
但是,如果你優(yōu)化你的SQL代碼,架構(gòu)和索引策略,也許你不會(huì)需要大環(huán)境。你必須總是三思而后行的性能和可擴(kuò)展性是不一樣的。
請(qǐng)務(wù)必使用EXPLAIN
EXPLAIN語(yǔ)句可以被用來(lái)作為獲取信息的方式MySQL如何執(zhí)行SELECT語(yǔ)句的代名詞DESCRIBE。
當(dāng)你前面一個(gè)關(guān)鍵字EXPLAIN SELECT語(yǔ)句,MySQL的顯示信息的查詢執(zhí)行計(jì)劃的優(yōu)化。也就是說(shuō),MySQL的說(shuō)明它將如何處理SELECT,包括信息表加入的順序??梢允褂肊XPLAIN擴(kuò)展的提供額外的信息。
選擇正確的數(shù)據(jù)類型
通常存儲(chǔ)在磁盤(pán)上(除了一些數(shù)據(jù)庫(kù),內(nèi)存數(shù)據(jù)庫(kù)一樣,它是存儲(chǔ)在內(nèi)存中)。這意味著,為了獲取信息,為您的數(shù)據(jù)庫(kù),它必須從磁盤(pán)讀取該信息,并把它變成一個(gè)結(jié)果集,您可以使用。磁盤(pán)I / O是極其緩慢的,尤其是在比較其他形式的數(shù)據(jù)存儲(chǔ)。
當(dāng)你的數(shù)據(jù)庫(kù)的增長(zhǎng)要大,開(kāi)始讀取時(shí)間要長(zhǎng)。設(shè)計(jì)拙劣的數(shù)據(jù)庫(kù)處理這個(gè)問(wèn)題比他們實(shí)際需要的磁盤(pán)上分配更多的空間。這意味著該數(shù)據(jù)庫(kù)占用空間的磁盤(pán)的使用效率低下。
選擇正確的數(shù)據(jù)類型,可以幫助確保我們存儲(chǔ)的數(shù)據(jù),使數(shù)據(jù)庫(kù)盡可能的小。為此,我們只選擇我們所需要的數(shù)據(jù)類型。
使用持久連接
使用永久連接的原因是減少數(shù)量的連接是相當(dāng)昂貴的,即使他們更快的與MySQL與大多數(shù)其他數(shù)據(jù)庫(kù)。
有一些爭(zhēng)論這個(gè)話題,在網(wǎng)絡(luò)上mysqli擴(kuò)展已禁用持久性連接功能,所以我會(huì)寫(xiě)更多關(guān)于這個(gè)主題。持久連接的唯一的缺點(diǎn)是,如果你有多個(gè)并發(fā)連接,可以達(dá)到max_connections設(shè)置。這是很容易改變Apache的設(shè)置,所以我不認(rèn)為這是原因?yàn)槭裁茨悴粦?yīng)該使用持久連接。
持久連接是特別有用的,如果你有另一臺(tái)計(jì)算機(jī)上的數(shù)據(jù)庫(kù)服務(wù)器。由于上述缺點(diǎn),明智地使用它們。
了解查詢緩存
查詢緩存存儲(chǔ)的SELECT語(yǔ)句的文本,連同相應(yīng)的結(jié)果發(fā)送到客戶端。如果相同的語(yǔ)句被接收后,服務(wù)器從查詢緩存中,而不是分析和再次執(zhí)行該語(yǔ)句檢索結(jié)果。查詢緩存是共享的會(huì)話之間,這樣的結(jié)果集所產(chǎn)生的一個(gè)客戶端可以發(fā)送另一個(gè)客戶端發(fā)出的相同的查詢。
查詢緩存的環(huán)境中,可能是有用的,你有表不經(jīng)常改變,服務(wù)器接收到許多相同的查詢。對(duì)于許多Web服務(wù)器產(chǎn)生許多動(dòng)態(tài)頁(yè)面的基于數(shù)據(jù)庫(kù)的內(nèi)容,這是一個(gè)典型的情況。
查詢緩存不返回過(guò)時(shí)的數(shù)據(jù)。在查詢緩存表被修改時(shí),任何相關(guān)的條目將被刷新。
你怎么找到我的MySQL查詢緩存是工作或沒(méi)有?
MySQL提供的統(tǒng)計(jì)資料,只需鍵入下面的命令在mysql>提示符下:
mysql> show variables like 'query%';
不要使用索引列的功能
列上的索引可以是偉大的性能增益,但如果你使用該列中的函數(shù),指數(shù)是從來(lái)沒(méi)有使用過(guò)。
總是嘗試重寫(xiě)查詢不使用索引列的功能。
WHERE TO_DAYS(CURRENT_DATE) - TO_DAYS(event_date) <= 7
可能是
WHERE event_date >= '2011/03/15' - INTERVAL 7 DAYS
今天的日期是從PHP生成。這樣一來(lái),指數(shù)列EVENT_DATE的查詢緩存內(nèi)可存儲(chǔ)和查詢。
了解禪宗的SQL編碼
SQL代碼是優(yōu)化數(shù)據(jù)庫(kù)性能的基礎(chǔ)。主SQL編碼技術(shù),如重寫(xiě)子查詢的SQL語(yǔ)句使用連接,消除了連接和類似的游標(biāo)。
通過(guò)編寫(xiě)巨大SQL代碼數(shù)據(jù)庫(kù)的性能將是巨大的。
使用ON DUPLICATE KEY UPDATE
如果你指定ON DUPLICATE KEY UPDATE,會(huì)導(dǎo)致在一個(gè)UNIQUE索引或PRIMARY KEY重復(fù)的值,更新舊行。
INSERT INTO wordcount (word, count) VALUES ('a_word',1) ON DUPLICATE KEY UPDATE count=count+1;
您保存訪問(wèn)服務(wù)器(然后選擇更新),清理你的代碼刪除所有,如果record_exists插其他更新。
如果按照此提示,數(shù)據(jù)庫(kù)將不勝感激給你。
相關(guān)文章
MySQL5.7 mysqldump備份與恢復(fù)的實(shí)現(xiàn)
這篇文章主要介紹了MySQL5.7 mysqldump備份與恢復(fù)的實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2020-11-11Win10安裝MySQL5.7.18winX64 啟動(dòng)服務(wù)器失敗并且沒(méi)有錯(cuò)誤提示
這篇文章主要介紹了Win10安裝MySQL5.7.18winX64 啟動(dòng)服務(wù)器失敗并且沒(méi)有錯(cuò)誤提示,需要的朋友可以參考下2017-06-06SQL匯總統(tǒng)計(jì)與GROUP BY過(guò)濾查詢實(shí)現(xiàn)
這篇文章主要介紹了SQL匯總統(tǒng)計(jì)與GROUP BY過(guò)濾查詢實(shí)現(xiàn),GROUP BY 實(shí)質(zhì)是先排序后分組,遵照索引建的最佳左前綴。當(dāng)無(wú)法使用索引時(shí),增大max_length_for_sort_data和sort_buffer參數(shù)的值2023-01-01深入講解數(shù)據(jù)庫(kù)中Decimal類型的使用以及實(shí)現(xiàn)方法
MySQL?DECIMAL數(shù)據(jù)類型用于在數(shù)據(jù)庫(kù)中存儲(chǔ)精確的數(shù)值,我們經(jīng)常將DECIMAL數(shù)據(jù)類型用于保留準(zhǔn)確精確度的列,例如會(huì)計(jì)系統(tǒng)中的貨幣數(shù)據(jù),下面這篇文章主要給大家介紹了關(guān)于數(shù)據(jù)庫(kù)中Decimal類型的使用以及實(shí)現(xiàn)方法的相關(guān)資料,需要的朋友可以參考下2022-02-02一次mysql遷移的方案與踩坑實(shí)戰(zhàn)記錄
這篇文章主要給大家介紹了一次mysql遷移的方案與踩坑的相關(guān)資料,MySQL遷移是DBA日常維護(hù)中的一個(gè)工作,遷移究其本義,無(wú)非是把實(shí)際存在的物體挪走,保證該物體的完整性以及延續(xù)性,需要的朋友可以參考下2021-08-08MySQL子查詢與HAVING/SELECT的結(jié)合使用
這篇文章主要介紹了MySQL子查詢?cè)贖AVING/SELECT字句中使用、及相關(guān)子查詢和WITH/EXISTS字句的使用,具有一定的參考價(jià)值,感興趣的可以了解一下2023-06-06mysql5.7.18.zip免安裝版本配置教程(windows)
這篇文章主要為大家詳細(xì)介紹了mysql5.7.18.zip安裝教程,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-05-05InnoDb 體系架構(gòu)和特性詳解 (Innodb存儲(chǔ)引擎讀書(shū)筆記總結(jié))
下面小編就為大家?guī)?lái)一篇InnoDb 體系架構(gòu)和特性詳解 (Innodb存儲(chǔ)引擎讀書(shū)筆記總結(jié))。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2017-03-03解決MySQL中IN子查詢會(huì)導(dǎo)致無(wú)法使用索引問(wèn)題
這篇文章主要介紹了MySQL中IN子查詢會(huì)導(dǎo)致無(wú)法使用索引問(wèn)題,文章給大家介紹了兩種子查詢的寫(xiě)法,需要的朋友可以參考下2017-06-06