上一章講了如何通過索引來提速我們的查詢語句,這一章讓我們回到資料庫開發的初始階段,建表。談談怎樣設計一張漂亮的表。
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語句的優化方法。
資料庫將一張表插入另一張表中
1.將一張表的資料插入到另一張表中 insert into seckill hjh id,code,name,drumbeating,strat time,productid,price,amount,pay time,num once,note,statu,cause,userid,check u...
資料庫調優教程 優化sql語句
上一章講了如何設計一張好的表,一張好的表自然需要好的sql語句去操作它。本章就來聊聊如何優化sql語句。1.sql語句優化原則 優化需要優化的query 定位優化物件效能瓶頸 從explain入手 盡可能在索引中完成排序 只取自己需要的column 盡可能避免複雜的join和子查詢 2.優化limi...
資料庫調優教程(七)索引的代價
4.索引的代價 前面幾講介紹了索引在提高效能方面的威力以及如何使用索引,但是索引也是有開銷的 1 占用磁碟空間 如前面所述,索引是有開銷的,表現在新增索引後.ibd檔案 innodb引擎 或者.myi檔案 myisam引擎 會變大。2 導致dml操作速度變慢 新增索引後之所以會快,是因為表依據索引對...