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