小編給大家分享一下MySQL數據庫性能優化的示例分析,相信大部分人都還不怎么了解,因此分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后大有收獲,下面讓我們一起去了解一下吧!
因為數據量太多了,項目部署上線再到用戶使用,每天數據增長幾十萬條,給服務器帶來非常大的負擔,互聯網一直追求高性能,可是隨著業務規模變大,用戶數量變多,服務器的性能越來越差,因此我們不得不對數據庫有更高要求。
第一,是查詢的速度,我們期望數據量到達TB級別仍然能夠實現百萬級別查詢速度。
第二、是并發量,我們對它的要求能夠同時處理幾千甚至上萬的并發訪問,還要配合Redis、MQ等。
第三,高可用,隨著業務規模不斷變大,我們要隨時準備對服務器進行擴展,可能由原來幾十臺服務器擴展到上百臺甚至上千臺服務器,所以我們要搭載MySQL集群。
第四,事務的安全性,當業務出現高并發訪問,怎么保證讀寫一致性???保證事務的安全性??? 參考多線程的思路。。
第一個思考的是應該用什么樣的存儲引擎,因為存儲引擎決定著它的性能,好比你是用汽車、飛機還是坦克, 每個引擎都有它特殊的作用。 業務上常用的是兩種,INNODB和MYISAM。

當我們對業務沒有過多的讀寫要求,以查詢為主,使用MyISAM,當我們對事務完整性要求較高,并發要求高,增刪頻繁,經常進行讀寫操作,使用INNODB更好。
第二個我們要給加快查詢速度, 所以要給表特殊字段添加索引,索引的原理是改變數據的存儲結構,這里分為兩種:第一是BTree,第二是B+Tree。 我們業務上一般使用的是B+Tree,BTree有一個特點,是根節點和葉子節點都會存放數據,這會造成比如查詢最底層葉子節點,會一層一層讀根節點的數據,會增加磁盤I/O次數,無形當中又會增加數據庫的壓力。 所以要用B+Tree
第三實現高可用方案, 這里我們會為數據庫服務搭載主從結構集群,緩解讀和寫的壓力
第四是安全問題,這里可以參考線程的安全問題,比如怎么解決高并發訪問??如何能保證事務的完整性?? 像RocketMQ也涉及事務消息, 如何避免這類問題, 我們可以上鎖。 以下是鎖的分類。

1、查詢盡量避免全表掃描,首先考慮在where、order by字段上添加索引
2、避免在where字段上使用NULL值,所以在設計表時盡量使用NOT NULL約束,有些數據會默認為NULL,可以設置默認值為0或者-1
3、避免在where子句中使用!=或<>操作符,Mysql只對<,<=,=,>,>=,BETWEEN,IN,以及某些時候的LIKE使用索引
4、避免在where中使用OR來連接條件,否則可能導致引擎放棄索引來執行全表掃描,可以使用UNION進行合并查詢
select id from t where num = 30 union select id from t where num = 40;
5、盡量避免在where子句中進行函數或者表達式操作
6、最好不要使用select * from t,用具體的字段列表代替"*",不要返回用不到的任何字段
7、in 和 not in 也要慎用,否則會導致全表掃描,如
select id from t where num IN(1,2,3)如果是連續的值建議使用between and,select id from t where between 1 and 3;
8、select id from t where col like %a%;模糊查詢左側有%會導致全表檢索,如果需要全文檢索可以使用全文搜索引擎比如es,slor
9、limit offset rows關于分頁查詢,盡量保證不要出現大的offset,比如limit 10000,10相當于對已查詢出來的行數棄掉前10000行后再取10行,完全可以加一些條件過濾一下(完成篩選),而不應該使用limit跳過已查詢到的數據。這是一個==offset做無用功==的問題。對應實際工程中,要避免出現大頁碼的情況,盡量引導用戶做條件過濾
以上是“MySQL數據庫性能優化的示例分析”這篇文章的所有內容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內容對大家有所幫助,如果還想學習更多知識,歡迎關注億速云行業資訊頻道!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。