Mysql優化 1 表優化

2021-07-07 06:50:47 字數 1468 閱讀 9699

mysql優化一直是個頭痛的問題,由於自己剛接觸mysql不久,故把自己的學習過程記錄於此。

mysql的優化不是指某個sql的優化,而是多種優化的組合,以下列表列出一般優化的過程。

mysql表的優化主要是指標的設計要符合理念;

1、首先表的設計要滿足3nf

資料庫3nf

第一正規化:表的屬性具有原子性,不可再分解。即表的列不可再分解。現在的關係型資料庫都滿足第一正規化。

第二正規化:表中的記錄要唯一,既不能出現完全相同的一行資料,可設計主鍵來滿足第二正規化。

第三正規化:避免不必要的冗餘資料,就是說,表的字段資訊,如果能夠被推導出來,就不應該單獨的設計乙個欄位來存放.

2、為每個表選擇合適的引擎

mysql支援多種儲存引擎,每種都有自己的特色。下列表列出來mysql的儲存引擎;

myisam

ibmdb2i

innodb

memory

merge

federated

archive

csvexample

blackhole

下面就常用的三個引擎做少許說明,

myisam

myisam引擎是3.23版本後的預設儲存引擎,即當你在建立表時若沒有指定儲存引擎,則預設是myisam引擎的,該引擎的錶能儲存更多的資料,查詢速度快,但無法處理事務等高階特性。

myisam引擎建立的表又分三種格式:靜態、動態、壓縮;

關於靜態myisam和動態myisam是指當表的任一列都不含varchar,text,blog,xblog,xtext時,mysql就認為該表是靜態的。

靜態myisam型別的表的效能很高,因為在維護和訪問以預定義儲存的資料時開銷很低而且最不可能出現因資料損壞而失敗的情況,但缺點是消耗空間資源,每列都需要為該列分配最大空間而不管是否使用。(如某欄位型別為char(20), 當該字段只存了 『aaaa』 四個位元組時,其依舊占用了20位元組的儲存空間)。

動態myisam:雖然myisam動態占用的空間比靜態格式的少,但容易引數碎片。如某個欄位的內容改變時,則該字段儲存在磁碟的位置可能需要移動,這會導致碎片的產生,當碎片過多時就會嚴重影響效能。這有兩種解決方案:

1:盡量使用靜態資料型別

2:使用 optimize table 整理表的碎片

在整個應用程式生命週期都可讀是,就應該把設計為myisam壓縮格式的,可以用myisampack工具來將其轉換為myisam壓縮表以減少占用空間

innodb

innodb是乙個精壯的事務型儲存引擎。是以下情況的理想引擎:

memory

改引擎的表資料儲存在記憶體中, 速度最快,但當mysql程序崩潰時,所有的memory資料都會丟失。

MySql優化 1 優化綜述

關係型資料庫 對於乙個以資料為中心的應用,資料庫的好壞直接影響到程式的效能,因此資料庫效能至關重要。一般來說,要保證資料庫的效率,要做好以下四個方面的工作 資料庫設計 表設計要符合3nf 規範的模式 但有時我們需要適當的逆正規化 sql 語句優化 索引 常用小技巧 資料庫引數配置 考hibernat...

mysql建表效能優化 MYSQL建表優化

除非單錶資料未來會一直不斷 否則不要一開始就考慮拆分,拆分會帶來邏輯 部署 運維的各種複雜度,一般以整型值為主的表在千萬級以下,字串為主的表在五百萬以下是沒有太大問題的。1 字段 a 盡量使用tinyint smallint medium int作為整數型別而非int,如果非負則加上unsigned...

MySQL優化四(優化表結構)

昨晚吃吃喝喝的太多,熬夜到凌晨二點。今天頭髮雜亂,臉龐憔悴,像是吸毒了。下午去買衣服,肚子一看大了不少。奈何女朋友還沒有乙個,就已經發福了。管不住口,邁不開腿。一 優化表結構 1.盡量將表字段定義為not null約束,這時由於在mysql中含有空值的列很難進行查詢優化,null值會使索引以及索引的...