在數據庫中,我們通過創建索引可以大大提高查詢的速度,一個好的索引可以另SQL的查詢更加效率。而一個錯誤的索引不僅帶不來效率的提高,甚至會帶來額外的系統開銷
索引的基本操作
創建索引
建表時創建索引
建表的時候指定
CREATE TABLE user(
ID INT NOT NULL,
username VARCHAR(16) NOT NULL,
INDEX [indexName] (username(length))
);
1
2
3
4
5
CREATE創建索引
為已有的表添加
CREATE INDEX indexName ON user(username(length));
1
主鍵索引
該語句添加一個主鍵,這意味着索引值必須是唯一的,且不能為NULL
ALTER TABLE user ADD PRIMARY KEY (ID)
1
唯一索引
這條語句創建索引的值必須是唯一的(除了NULL外,NULL可能會出現多次)
ALTER TABLE user ADD UNIQUE indexName (username)
1
普通索引
添加普通索引,索引值可出現多次
ALTER TABLE user ADD INDEX indexName (username)
1
全文索引
該語句指定了索引為 FULLTEXT ,用於全文索引。僅可用於 MyISAM 表,
用於在一篇文章中,檢索文本信息的。
ALTER TABLE user ADD FULLTEXT indexName (username)
1
聯合索引
組合索引(包含多列的索引,與單行索引相對),遵循最左原則
ALTER TABLE user ADD INDEX indexName ( `column1`, `column2`, `column3` )
1
刪除索引
DROP INDEX indexName ON user;
1
修改索引
alter TABLE user add INDEX indexName on(username(length))
1
查詢索引信息
使用 show index 命令來列出表中的相關的索引信息。可以通過添加 \g 來格式化輸出信息。
SHOW INDEX FROM user
1
使用索引
使用索引時候需要注意的
LIKE關鍵字匹配’%‘開頭的字符串,不會使用索引,但是以’%'結尾的可以。
OR關鍵字的兩個字段必須都是用了索引,該查詢才會使用索引。
使用多列索引必須滿足最左匹配.
數據庫索引的原理
一般來說數據庫索引是使用B+tree的數據結構
使用B+樹,並不是二叉樹而是指的平衡樹,它可以根據鍵值快速找到數據。B+樹索引通過鍵值可以快速定位數據行所在的頁,然后數據庫通過頁內容讀入內存,而在內存中定位到數據。
數據庫索引可以實現效果
可以避免進行數據庫全表的掃描,大多數情況,只需要掃描較少的索引頁和數據頁。
對於非聚集索引,有時不需要訪問數據頁即可得到數據。
聚集索引可以避免數據插入操作,集中於表的最后一個數據頁面。
在某些情況下,索引可以避免排序操作。
無索引的查詢中,沒有使用索引的情況下掃描每個記錄來查找符合條件的記錄。
數據庫索引的不足
數據庫索引使用了空間換時間的策略,建立的索引會占用磁盤空間。隨着數據的增加,索引文件會膨脹很快。
數據庫不僅需要保存數據還需要保存索引文件,這就導致對表進行更新或者刪除操作的時候速度降低。
索引越多會讓數據更新操作的時候變得更慢,不合理的索引會拖慢數據庫的整體效率。
創建索引的原則
主鍵列默認使用了索引
假如有外鍵定義也需要建立索引
經常被作為查詢條件的列最好建立索引
經常需要被排序、分組的字段建立索引,如果是復合索引,則需要排序、分組的順序和索引順序一致
極少作為查詢條件、或者數據存在大量重復的列不需要建立索引
對於數據較多的字段,最好不要建立索引
經常被修改的字段,最好不要建立索引
多表連接查詢的時候,連接字段上應該建立索引
頻繁被修改的表,最好不要建立太多的索引
檢查索引,刪除無用的索引
正確算是創建復合索引
對於復合索引,第一個字段應該是使用頻率最高的字段
復合索引中的幾個字段,需要經常以AND方式出現在條件語句中,否則不需要創建復合索引
復合索引中的字段不宜過多(3個及以下)
一個字段有單獨查詢也有關聯查詢,一般來說創建單獨索引而不需要創建復合索引
————————————————
轉載:https://blog.csdn.net/qq330983778/article/details/100086830
眾覽群雄,唯我杭城獨秀——一貼匯總杭州校區所有就業薪資
- http://bbs.itheima.com/forum.php?mod=viewthread&tid=345570
- [color=inherit !important]一貼看杭州分校吃住行,學習生活攻略大集錦
- http://bbs.itheima.com/thread-347847-1-1.html
- 全新圖文杭州新校區來校路線圖:
- http://bbs.itheima.com/thread-347847-1-1.html
- 更多技術資訊可關注:itheimaGZ獲取
