資料庫調優教程(十一) 設計一張漂亮的表,資料庫調優
四、 設計一張漂亮的表
上一章講了如何通過索引來提速我們的查詢語句,這一章讓我們回到資料庫開發的初始階段,建表。談談怎樣設計一張漂亮的表。
1. 滿足三範式
1NF: 即表的列的具有原子性,不可再分解,即列的資訊,不能分解, 只要資料庫是關係型資料庫(mysql/oracle/db2/informix/sysbase/sqlserver),就自動的滿足1NF
資料庫的分類
關係型資料庫: mysql/oracle/db2/informix/sysbase/sql server
非關係型資料庫: 物件導向或者集合
面向文檔資料庫: MongoDB
2NF: 表中的記錄是唯一的, 就滿足2NF, 通常我們設計一個主鍵來實現。一般情況下,表中都必須設定主鍵,並且一般不含商務邏輯,可以設定為自增長。
3NF: 即表中不要有冗餘資料, 就是說,表的資訊,如果能夠被推匯出來,就不應該單獨的設計一個欄位來存放.
有時候為了減少查詢次數,可以容忍冗餘。
2. 欄位數目不要過多
一張表的欄位過於龐大,會導致查詢時的掃描範圍加大,即使你並沒有查詢相應欄位。
所以,如果一張表某個欄位,資訊量大,但是我們很少查詢,則可以考慮把這些欄位,單獨的放入到一張表中,這種方式稱為垂直分割
3. 選擇合適的欄位類型
在建立表的時候要選取最適用的欄位屬性。
一般說來,資料庫中的表越小,在它上面執行的查詢也就會越快。因此,在建立表的時候,為了獲得更好的效能,我們可以將表中欄位的寬度設得儘可能小
舉個例子
11位的手機號
有兩種類型可以儲存
Bigint、char(11)。Int類型最大2147483647不可存
考慮到Bigint佔20位元組,而char(11)佔11*2=22(gbk)或11*3=33(utf-8),所以使用bigInt是最好的。
如果在建立表之後發現表的欄位設定不夠合理想修改時怎麼修改呢?
4. 修改表結構
如果發現表的欄位設定不夠合理想修改時怎麼修改呢,有兩種方法。
傳統方法
先使用show createtable 查看原先怎樣建立欄位的
然後就可以根據需要修改了
alter table patent_data modify mingcheng varchar(500) DEFAULT NULL COMMENT '名稱';
快速方法(簡單粗暴而高效)
建立一個結構是你所需要的空表,關閉mysql,在檔案夾中直接複製新產生的表的frm檔案替換掉原來表的的frm檔案
註:
Frm檔案位於mysql安裝目錄下的 /data/資料庫名 目錄下
本章結束,下一章將談談sql語句的最佳化方法。