Mysql資料庫優化

2021-08-15 08:43:17 字數 3106 閱讀 3842

一、mysql資料庫的優化技術

對mysql優化是乙個綜合性的技術,主要包括如下幾點:

1.表的設計合理化(滿足3nf)

2.新增適當的索引

3.分表技術(水平分割、垂直分割)

4.讀寫分離

5.儲存過程

6.對mysql配置優化

7.mysql伺服器硬體公升級

8.定時清除無用資料,定時整理myisam儲存引擎的碎片

二、mysql資料庫優化詳解

(一)表的合理化設計之3nf

1.滿足3nf的前提,分別需要滿足1nf和2nf

2.1nf:表的列具有原子性,不可再拆分。

例:現有表 user(id,age,name,adress),

1 18 張三 江西省九江市

即此表便滿足1nf,可能有人會疑惑adress欄位不是可以再次進行拆分嗎,可以拆成省字段和市欄位。

其實不然,這裡所說的不可拆分的意思不是字段能否從含義上再次進行拆分,而是指此字段的值是否能夠

描述此字段的含義,即江西省九江市能夠描述

adress這個欄位的含義。換句話說,只要是關係型資料庫都

滿足1nf。

3.2nf:在滿足1nf的前提下,表中的記錄是唯一的,即表中需要包含乙個主鍵,一般來說此主鍵欄位不應該

為業務字段。

例:存在表 goods(goods_id,goods_no,goods_name) 此表中goods_id為主鍵不包含任何的

業務,不應該

用goods_id來作為商品編號,而應該新建goods_no欄位作為商品編號。

4.3nf:在滿足2nf的前提下,表中不要有冗餘資料,即表中的資訊如果能從與其相關聯的表中獲取資訊,則不應該

單獨設計乙個欄位來存放資訊。

例:存在表a(id,name,bid,bname) 表b(bid,bname) 此設計則不滿足3nf的標準 即bname欄位可以通過bid獲取。

(二)索引

1、索引分類

1.1、主鍵索引

當建立一張表並將此表設定為主鍵時,則會建立主鍵索引。

例:create table t(id int primary key auto_increment,name varchar(20

) not null)

此時id列就為主鍵索引

或 create table t(id int,name varchar(20));

alter table t add primary key(id);

1.2、普通索引

當建立表後,指定非主鍵列建立普通索引。

例:create table t(id int primary key,name varchar(20),dept_no int);

create index t_index_id on t (dept_no);

語法:create index 索引名 on 表名 (列名)

1.3、唯一索引

當表的字段為unique約束時,這列就是乙個唯一索引

例:create table t(int a primary key,varchar b unique)l

此時b欄位就為唯一索引

1.4、全文索引

主要針對對檔案、文章的檢索。

解釋略,(全文索引對中文的支援性如何,不太確定,個人認為需要建立全文檢索解決的問題,

solr幾乎都能搞定,

所以就不過多做解釋了)

2.查詢索引

show index from 表名

3.索引的原理以及優缺點

原理:未加索引前,mysql會掃瞄全表查詢你需要的資料,

即:執行sql:select * from table where id = 5; id非索引,此時table表有100條資料,即使找到了id為5的資料

mysql任然會繼續往下掃瞄,因為mysql無法確定只有乙個id的值為5。

加入索引後,mysql會將資料相應的位址根據不同的索引方法(如btree,不同的資料結構)儲存到本地檔案。

當再次執行查詢語句時,mysql會找到本地檔案,根據索引方法獲取到相應的記錄的位址,然而獲取資料。

優點:讀取快,親測100w+資料未加入索引前需要1.55s,加入索引後只需0.05秒。

缺點:寫操作慢

4.不會走索引的操作

a.當建立聯合索引時,即 create index t_index_name_age on table (age,name)。只有查詢條件使用了

左邊的列(age),索引才會被使用,若果查詢條件為右邊的列(name)則索引不會被使用。

b.使用like查詢時,查詢條件如果是like '%aa',則不會走索引,like'aa%'才會走索引

c.如果條件中有or,必須要or兩邊的字段都為索引,才會走索引。

d.如果列型別為字串,查詢的值必須用引號括起來才能走索引,比如 where a = 123,則不會走索引,

a='123'會走索引.

5.檢視索引使用情況

命令:show status like 'handler_read%';

其中handler_read_key 這個值越高越好,表示使用索引查到的次數.

handler_read_md_next 這個 越高,說明查詢低效

6.mysql執行計畫

在查詢語句之前加入關鍵命令 explain

例:

explain各個欄位的解釋

a. id:查詢序列號

b.select_type:查詢型別 all表示全表掃瞄,表示為不走索引

c.table:查詢的表名

d.type:掃瞄方式

e.possible_key:可能用到的索引

f.key:實際用的索引

g.row:該sql語句可能會掃瞄多少行

h.extra:額外資訊 若此sql使用到了排序則會顯示filesort

其他優化方案我會陸續更新部落格,若本文有說錯的地方,還請各位支出,不足之處也請多多包涵。

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...