Mysql優化實戰總結與面試

2021-10-07 08:48:07 字數 2284 閱讀 7012

使用機械硬碟或者加裝固態硬碟

可以將mysql放在window環境中也可以放到linux環境下後者更快

1.儘量減少查詢所有以及子查詢等一些操作,關聯查詢要比只查詢要快

2.避免進行全表掃瞄,比如使用模糊查詢第乙個字用萬用字元,或者or,以及is null andis not null

3.不要對索引字段進行操作,或者會導致索引失效

4.使用聯合索引的時候不要跨列使用否則也會導致索引失效

5.對聯合索引最好使用最左原則(從聯合索引的最左側那個列開始在where後面使用)

6.聯合索引的全值匹配就是在條件語句之後對聯合索引中的字段順序與欄位名完全一致全部都有用到

三正規化:乙個列之儲存乙個資料和其他列沒有任何關係

name

age-***

張三21-男

第一正規化:各列與各列沒有任何關係

name

age***

張三21

男第二正規化:建立乙個中間表讓表與表的關係連線起來

訂單表id

商品名稱

1東鵬特飲

使用者表id

使用者姓名1李四

中間表id

使用者表id

訂單表id11

1第三正規化:建立表與表之間的關係讓他們的資料呈現在一張表上

反正規化:就是在一張表中插如另一張表的少數幾個字段作為一張表資訊顯示(低冗合)

索引(資料結構):是幫助mysql高數獲取資訊的資料結構;

索引分類:

普通索引:

唯一索引:可以為空,乙個表中只能有乙個主鍵,在建立索引的時候使用unique而不是index

主鍵索引:在建立表的時候建立乙個主鍵、然後這個主鍵不能為空、每乙個表中也只有乙個主鍵

聯合索引:在乙個表中建立了多個索引字段,這些欄位在建立的時候就排好了順序在使用的時候不可以打亂這些順序使用

聯合索引需注意點:

非聚集索引

建立索引: 1.create index 索引名稱 on 表名(索引欄位名(可以有多個))

2.alter table 表名 add 索引型別(index/unique)  索引名稱(索引字段)

執行計畫:(explain):通過執行計畫的key欄位判斷sql語句是否用到索引

檢視執行計畫是否充分用到索引:通過keylength欄位檢視到他的數值再利用演算法

key length:等於索引的長度、索引為int型別且不為空則他的索引長度為4,索引長度為int型別且可以為空則他的索引為5,4+1如果值可以為空;

演算法:字串型別(2或0)+ 字符集(3)* 本身長度 + 是否為空 = keylength

演算法需要的引數:

1:字串型別 (varchar+2,char+0)

2:字符集(utf8 長度為3)

3:本身長度 (資料庫設定的長度)

4:是否為空;(null +1, notnull +0)(int型別只需要關注這乙個引數)

範圍條件放索引欄位的最後:

範圍條件:where中的條件字段 

放最後:放在索引欄位的最後

mysql建立索引需要注意那些:

三星索引:

一星索引:在改動較小穩定性高的字段上建立索引;

二星索引:排序(order by)順序和b+tree的順序相同;(較難達到)

三星索引:建立的索引欄位名剛好與要查詢的欄位名相同;(很難達到)

1.mysql記憶體結構:sga(系統全域性),pga(程式快取區)

sga(系統全域性):全域性共享記憶體(innodb_buffer_pool)

pga(程式快取區):執行緒獨享記憶體(sort_buff_size、join_buffer-size)

2.為什麼要使用b+樹不用紅黑樹和其他樹?

考慮深度問題所以使用b+樹

b樹:每乙個節點都帶key但是不帶具體資訊,檢索速度繁瑣

二叉樹:每一層只帶幾個資料所以會導致深度很深,查詢速度會很慢

紅黑樹:和二叉樹差不多深度太深影響速度

b+樹:之分為三層只有葉子節點帶有具體資訊,他會按照你要查詢的條件去進行判斷,

深度淺效率快

mysql優化面試總結

總結 1.資料庫的設計 盡量把資料庫設計的更小的佔磁碟空間.1 盡可能使用更小的整數型別.mediumint就比int更合適 2 盡可能的定義欄位為not null且設定預設值,除非這個字段需要null.3 只建立確實需要的索引。索引有利於檢索記錄,但是不利於快速儲存記錄。如果總是要在表的組合欄位上...

mysql面試總結 MySQL面試總結

最近在面試,總結一下問的比較多的問題,持續補充哈!基礎varchar與char區別 首先你要知道的是varchar 20 這裡的20代表的是字元,而不是位元組,其次在mysql中,所有使用utf8字符集,無論是中文還是英文,都是按照3個位元組儲存 varchar與char都可以儲存字元,它們的區別是...

mysql優化總結

如果大家有異議,可以在後面補充。我會隨時更新的。現在大概列出如下 望各位補充 1.資料庫的設計 盡量把資料庫設計的更小的佔磁碟空間.1 盡可能使用更小的整數型別.mediumint就比int更合適 2 盡可能的定義欄位為not null,除非這個字段需要null.這個規則只適合欄位為key的情形 3...