mysql 廖雪峰_关系模型 - 索引 - 《廖雪峰 SQL教程(MySQL)》 - IT Book
索引
在關系數(shù)據(jù)庫中,如果有上萬甚至上億條記錄,在查找記錄的時候,想要獲得非常快的速度,就需要使用索引。
索引是關系數(shù)據(jù)庫中對某一列或多個列的值進行預排序的數(shù)據(jù)結(jié)構(gòu)。通過使用索引,可以讓數(shù)據(jù)庫系統(tǒng)不必掃描整個表,而是直接定位到符合條件的記錄,這樣就大大加快了查詢速度。
例如,對于students表:
idclass_idnamegenderscore11小明M90
21小紅F95
31小軍M88
如果要經(jīng)常根據(jù)score列進行查詢,就可以對score列創(chuàng)建索引:
ALTER TABLE students
ADD INDEX idx_score(score);
使用ADD INDEX idx_score (score)就創(chuàng)建了一個名稱為idx_score,使用列score的索引。索引名稱是任意的,索引如果有多列,可以在括號里依次寫上,例如:
ALTER TABLE students
ADD INDEX idx_name_score(name,score);
索引的效率取決于索引列的值是否散列,即該列的值如果越互不相同,那么索引效率越高。反過來,如果記錄的列存在大量相同的值,例如gender列,大約一半的記錄值是M,另一半是F,因此,對該列創(chuàng)建索引就沒有意義。
可以對一張表創(chuàng)建多個索引。索引的優(yōu)點是提高了查詢效率,缺點是在插入、更新和刪除記錄時,需要同時修改索引,因此,索引越多,插入、更新和刪除記錄的速度就越慢。
對于主鍵,關系數(shù)據(jù)庫會自動對其創(chuàng)建主鍵索引。使用主鍵索引的效率是最高的,因為主鍵會保證絕對唯一。
唯一索引
在設計關系數(shù)據(jù)表的時候,看上去唯一的列,例如身份證號、郵箱地址等,因為他們具有業(yè)務含義,因此不宜作為主鍵。
但是,這些列根據(jù)業(yè)務要求,又具有唯一性約束:即不能出現(xiàn)兩條記錄存儲了同一個身份證號。這個時候,就可以給該列添加一個唯一索引。例如,我們假設students表的name不能重復:
ALTER TABLE students
ADD UNIQUE INDEX uni_name(name);
通過UNIQUE關鍵字我們就添加了一個唯一索引。
也可以只對某一列添加一個唯一約束而不創(chuàng)建唯一索引:
ALTER TABLE students
ADD CONSTRAINT uni_name UNIQUE(name);
這種情況下,name列沒有索引,但仍然具有唯一性保證。
無論是否創(chuàng)建索引,對于用戶和應用程序來說,使用關系數(shù)據(jù)庫不會有任何區(qū)別。這里的意思是說,當我們在數(shù)據(jù)庫中查詢時,如果有相應的索引可用,數(shù)據(jù)庫系統(tǒng)就會自動使用索引來提高查詢效率,如果沒有索引,查詢也能正常執(zhí)行,只是速度會變慢。因此,索引可以在使用數(shù)據(jù)庫的過程中逐步優(yōu)化。
小結(jié)
通過對數(shù)據(jù)庫表創(chuàng)建索引,可以提高查詢速度。
通過創(chuàng)建唯一索引,可以保證某一列的值具有唯一性。
數(shù)據(jù)庫索引對于用戶和應用程序來說都是透明的。
讀后有收獲可以支付寶請作者喝咖啡
總結(jié)
以上是生活随笔為你收集整理的mysql 廖雪峰_关系模型 - 索引 - 《廖雪峰 SQL教程(MySQL)》 - IT Book的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 微信小程序之微信登陆 —— 微信小程序教
- 下一篇: linux cmake编译源码,linu