您好,登錄后才能下訂單哦!
下文內容主要給大家帶來mysql索引的相關知識,所講到的知識,與書籍略有不同,都是億速云專業技術人員在與用戶接觸過程中,總結出來的,具有一定的經驗分享價值,希望給廣大讀者帶來幫助。
我們先來了解MYSQL索引的概念:
索引是一種特殊的文件,他們包含著對數據表里所有記錄的引用指針。更通俗地說,數據庫索引好比是是一本書前面的目錄,能加快數據庫的查詢速度,我們有了相應的索引后,數據庫會直接在索引中查找符合條件的選項。索引分為聚簇索引和非聚簇索引兩種,聚簇索引是按照數據存放的物理位置為順序的,而非聚簇索引就不一樣了,聚簇索引能提高多行檢索的速度,而非聚簇索引對單行的檢索很快。
mysql主要有兩種結構:B+樹和hash
hash索引在mysql中較少用,它以把數據的索引以hash形式組織起來,因此當查找某一條記錄的時候,速度非常快。因為是hash結構,每個鍵只對應一個值,而且是散列的方式分布,所以它并不支持范圍查找和排序等功能。
B+樹:B+樹是mysql使用最頻繁的一個索引數據結構,數據結構以平衡樹的形式來組織,因為是樹形結構,所以更適合用來處理排序,范圍查找等功能。相對hash索引,B+樹在查找單條索引的速度上雖然比不上hash索引,但是因為更適合排序等操作,所以更受用戶的歡迎。
MYSQL索引的類型:
普通索引:
這是最基本的索引,它沒有任何限制,它有以下幾種創建方式:
(1)創建索引:
CREATE INDEX indexName ON mytable(username(length));
(2)修改表結果:
ALTER mytable ADD INDEX [indexName] ON (username(length))
CREATE TABLE mytable( ID INT NOT NULL, username VARCHAR(16) NOT NULL, INDEX [indexName] (username(length)) );
刪除索引:
DROP INDEX
index_name
ON
table
2.唯一索引:
與前面的普通索引類似,不同的是:索引列的值必須唯一,但允許有空值,如果是組合索引,則列值的組合必須唯一。它有以下幾種創建方式:
(1)創建索引:
CREATE UNIQUE INDEX indexname ON mytable(username(length))
(2)修改表結構:
ALTER mytable ADD UNIQUE[indexName] ON(username(length))
(3)創建表的時候直接指定:
CREATE TABLE mytable(ID INT NOT NULL,username VARCHAR(16) NOT NULL,UNIQUE [indexName](username(length)))
3.主鍵索引:
這是一種特殊的唯一索引,不允許有空值,一般是在建表的時候,創建主鍵索引:
CREATE TABLE mytable (ID INT NOT NULL,username VARCHAR(16) NOT NULL,PRIMARY KEY(ID));
這里要注意,一個表只能有一個主鍵。
4.組合索引:
為了形象對比單列索引和組合索引,為表添加多個字段:
CREATE TABLE mytable(ID INT NOT NULL,username VARCHAR(16) NOT NULL,city VARCHAR(50) NOT NULL,age INT NOT NULL);
為了進一步榨取mysql的效率,就要考慮建立組合索引,就是將上面的name,city,age建到一個索引里:
ALTER TABLE mytable ADD INDEX name_ciry_age(name(10),city,age)
我們建表時username長度為16,這里用10,這是因為一般情況下名字的長度不會超過10,這樣會加速索引查找速度,還會減少索引文件的大小,提高insert的更新速度。如果分別在username,city,age上建立單列索引,讓該表有3個單列索引,查詢時和上述的組合索引效率也會不打一樣,遠遠低于我們的組合索引。
使用索引的注意事項:
1.索引不會包含有NULL值的列:只要列中包含有NULL值,都將不會被包含在mysql索引中,符合索引中只要有一列含有NULL值,那么這一列對于此復合索引就是無效的,所以我們在數據庫設計時不要讓字段的默認值為NULL。
2.使用短索引:對串列進行索引,如果可能應該指定一個前綴長度。短索引不僅可以提高查詢速度,而且可以節省磁盤空間和I/O操作。
3.索引列排序:mysql查詢只使用一個索引,因此如果where子句中已經使用了索引的話,,那么order by中的列是不會使用索引的。因此數據庫默認排序可以符合要求的情況下,不要使用排序操作,盡量不要包含多個列的排序操作,如果需要最好給這些列創建復合索引。
4.不要在列上進行運算,這將導致索引失效而進行全表掃描。
mysql各種索引區別:
普通索引:最基本的索引,沒有任何限制;
唯一索引:與普通索引類似,不同的是,索引列的值必須唯一,但允許有空值;
主鍵索引:它是一種特殊的唯一索引,不允許有空值;
全文索引:僅可用于MYISAM表,針對較大的數據,生成全文索引,很耗時耗空間;
組合索引:為了更高的提高mysql效率可建立組合索引,遵循“最左前綴”原則。
對于以上關于mysql索引的相關知識,如果大家還有更多需要了解的可以持續關注我們億速云的行業推新,如需獲取專業解答,可在官網聯系售前售后的,希望該文章可給大家帶來一定的知識更新。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。