mysql 資料庫優化問題

2021-09-14 01:09:29 字數 2044 閱讀 8614

可以先看一下我的另一篇文章:《mysql調優(慢查詢、explain以及索引、分頁優化)》

然後還有乙個博文:《mysql效能優化的最佳21條經驗》

兩個儲存引擎的區別:

詳見我的另一篇文章:《mysql的儲存引擎以及innodb和myisam的索引結構》

索引的使用場景:

不會頻繁變化的多個值(經常在where語句**現;不會頻繁變化;欄位的內容不是多個)、

注意:

注意最左字首優先原則

如果是like aaa%, 萬用字元在後的可以使用索引,反之像%aaa就不行

如果where查詢條件中有or,其中有條件沒有使用索引,那麼即使有條件帶了索引,也不會使用索引(也就是說,要求所有索引欄位都能單獨使用索引);

表裡只有一條記錄,使用全表掃瞄比索引更快,就不用索引。

資料庫分表問題:

水平分表和垂直分表(按行和按列)

當表中的資料灰常多的時候我們查詢效率就灰常低,可能造成表鎖,甚至堆積很多連線直到掛掉,所以這時候適合水平分表;

如果有乙個字段資料較大或者值較長(長文字、二進位制等),又不是很經常查詢到,就可以將這些字段單獨列出放在乙個表中,通過 外來鍵關聯(例如,考試表:只關注分數,不關係考試詳情 ,就可以將詳細資訊放在另乙個單獨的表中。)

水平分表的策略:

按照區間:一般都用於有嚴格的自增主鍵的情況下,例如userid從1~100w的分成乙個表,,,依次類推。

按照hash分表:將原表中的id或者name使用hash演算法計算出對應的表名,將資料存入對應的表中,訪問相應的表。

讀寫分離

併發量很大的時候進行集群操作,mysql的最常用的集群處理技術就是讀寫分離。

主從同步和讀寫分離:

主從同步就是所有將資料持久化到磁碟(寫)的操作都由主資料庫伺服器進行,其他資料庫進行copy主資料庫中的資料進行同步;

讀寫分離就是,寫就寫入主資料庫,讀就讀從資料庫的伺服器中。

使用快取

在dao(持久層)和資料庫之間新增乙個快取層,因為快取是記憶體級儲存,因此可以減輕資料庫的壓力。

hibernate的二級快取,不能實現分布式快取;

redis(memecache等)做** 快取。

語句優化

ddl 資料定義語言(*):1. 禁用索引:set table tb_user disable keys;2.set unique checks=0;關閉唯一校驗 3.關閉事務 set autocommit=0;

dml 資料操作語言(*):批量插入(將一次提交修改為多次提交)

dql 資料查詢語言: order by多使用 索引;group by中去掉預設排序,order by null;or中左右兩邊最好都用到索引,否則索引失效(如果name和email是乙個復合索引,name=「mu」 or email=「huhu」不會用到索引)

詳細的mysql相關問題見 《mysql總結和面試》

mysql資料庫優化索引 mysql資料庫索引調優

一 mysql索引 1 磁碟檔案結構 innodb引擎 frm格式檔案儲存表結構,ibd格式檔案儲存索引和資料。myisam引擎 frm格式檔案儲存表結構,myi格式檔案儲存索引,myd格式檔案儲存資料 2 mysql資料庫資料範問原理 innodb btree 1 ibd檔案中主鍵構建b tree...

mysql資料庫優先 MySQL資料庫優化

1.新增索引 mysql資料庫的四類索引 index 普通索引,資料可以重複,沒有任何限制。unique 唯一索引,要求索引列的值必須唯一,但允許有空值 如果是組合索引,那麼列值的組合必須唯一。primary key 主鍵索引,是一種特殊的唯一索引,乙個表只能有乙個主鍵,不允許有空值,一般是在建立表...

mysql資料庫優化

用到啥學啥,mysql資料庫優化成了這幾天的老大難問題。瘋狂的尋找mysql優化的資料,覺得有用的不少,記錄下跟大家分享,對了,這裡僅僅是mysql資料庫本身的優化,沒有寫磁碟之類的 開始之前,介紹倆mysql的命令 show global status 檢視執行狀態的,顯示執行各種狀態值 show...