1. 程式人生 > >mysql 聯合主鍵的作用 索引的作用

mysql 聯合主鍵的作用 索引的作用

聯合主鍵就是用2個或2個以上的欄位組成主鍵。用這個主鍵包含的欄位作為主鍵,這個組合在資料表中是唯一,且加了主鍵索引。
可以這麼理解,比如,你的訂單表裡有很多欄位,一般情況只要有個訂單號bill_no做主鍵就可以了,但是,現在要求可能會有補
充訂單,使用相同的訂單號,那麼這時單獨使用訂單號就不可以了,因為會有重複。那麼你可以再使用個訂單序列號bill_seq來
作為區別。把bill_no和bill_seq設成聯合主鍵。即使bill_no相同,bill_seq不同也是可以的。

alter table 表 add constraint pk_name primary key (列1,列2,...)
聯合主鍵的好處是不需要因為需要主鍵而增加一個無用的主鍵列 例如如果不用聯合主鍵你必須增加個列ID設定主鍵 但這個ID列
無任何作用  至於在什麼情況下使用,就像剛才舉例的,當你這個表的主鍵ID無任何用處,那麼就用聯合主鍵好了,你可以節約
一個列的空間,但如果這表的ID列要做為別的表的外來鍵的話,就不能用聯合主鍵了。
聯合主鍵就是確定一條記錄的唯一性啊
 
比如這種時候
商品品牌 商品型號
諾基亞        920
三星         NOTE2
諾基亞        8088
 
比如這樣商品品牌可能有重複,都是諾基亞,但是諾基亞廠商生產的商品型號是不會重複的
也比如,可能好多品牌都有920這個型號,但是一個品牌只有一個920的型號
 
所以就靠這樣的聯合主鍵來確定這條記錄的唯一性
 

什麼是索引?為什麼建立索引?

索引用於快速找出在某個列中有一特定值的行,不使用索引,MySQL必須從第一條記錄開始讀完整個表,直到找出相關的行,表越大,查詢資料所花費的時間就越多,如果表中查詢的列有一個索引,MySQL能夠快速到達一個位置去搜索資料檔案,而不必檢視所有資料,那麼將會節省很大一部分時間。

       例如:有一張person表,其中有2W條記錄,記錄著2W個人的資訊。有一個Phone的欄位記錄每個人的電話號碼,現在想要查詢出電話號碼為xxxx的人的資訊。

          如果沒有索引,那麼將從表中第一條記錄一條條往下遍歷,直到找到該條資訊為止。

          如果有了索引,那麼會將該Phone欄位,通過一定的方法進行儲存,好讓查詢該欄位上的資訊時,能夠快速找到對應的資料,而不必在遍歷2W條資料了。其中MySQL中的索引的儲存型別有兩種:BTREE、HASH。 也就是用樹或者Hash值來儲存該欄位,要知道其中詳細是如何查詢的,就需要會演算法的知識了。我們現在只需要知道索引的作用,功能是什麼就行。

使用原則:

       1、對經常更新的表就避免對其進行過多的索引,對經常用於查詢的欄位應該建立索引,

       2、資料量小的表最好不要使用索引,因為由於資料較少,可能查詢全部資料花費的時間比遍歷索引的時間還要短,索引就可能不會產生優化效果。

       3、在一同值少的列上(欄位上)不要建立索引,比如在學生表的"性別"欄位上只有男,女兩個不同值。相反的,在一個欄位上不同值較多可是建立索引。