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