數(shù)據(jù)庫索引

索引是對數(shù)據(jù)庫表中的一列或者多列的值進行排序的一種 數(shù)據(jù)結(jié)構(gòu) ,使用索引可以快速訪問數(shù)據(jù)庫表中的特定信息(避免了全表掃描的耗時)。

  • 索引分為: 聚簇索引非聚簇索引 。聚簇索引是按照數(shù)據(jù)存放的物理位置為順序的,非聚簇索引不一樣;聚簇索引能夠提高多行檢索的速度,非聚簇索引對于單行的檢索很快。
  • 常見索引類型: 主鍵索引 (唯一索引的特例), 唯一索引 (關(guān)聯(lián)的列不能有2行相同的值), 聚集索引 (表中行的物理順序與鍵值索引的邏輯順序相同。一個表只能包含一個聚集索引)

優(yōu)點:

  • 例如:SELECT * FROM projects WHERE id=110,沒有索引時需要全表掃描projects表直到找到符合項,如果給id列添加索引,則只需要在索引列進行搜索,并且因為索引列是經(jīng)過某種算法優(yōu)化過的,所以查找次數(shù)要小很多。
  1. 創(chuàng)建唯一性索引,可以保證數(shù)據(jù)庫表中每一行數(shù)據(jù)的唯一性
  2. 可以大大加快數(shù)據(jù)的檢索速度
  3. 可以加速表與表之間的鏈接,特別是再實現(xiàn)數(shù)據(jù)的參考完整性方面

缺點:

  1. 創(chuàng)建索引和維護索引需要耗時,并且隨著數(shù)據(jù)量的增加時間會增加
  2. 索引需要占據(jù)一定的物理空間
  3. 對表中的數(shù)據(jù)進行修改時(增加,刪除,更新),索引也需要進行動態(tài)維護,降低了數(shù)據(jù)的維護速度。
實踐
  • SHOW INDEX FROM table_name,顯示某表上的所有索引
  • CREATE INDEX index_name ON table_name(col_name),為表的某列添加索引
  • CREATE UNIQUE INDEX index_name ON table_name(col1, col2),為表的某列添加唯一索引
  • ALTER TABLE table_name DROP INDEX index_name,修改表:刪除表的某個索引
SHOW INDEX FROM projects;                          # 顯示projects表上的所有索引

CREATE INDEX index_school_address ON schools(address DESC)  # 以降序索引某列的值
CREATE UNIQUE INDEX index_name ON schools(name)    # 添加唯一索引

ALTER TABLE schools DROP index_name ON schools     # 刪除索引
DROP INDEX index_name ON schools                   # 同上
  • index_type索引類型: BTREE

  • Non_unique是否不唯一: 0表示唯一索引,1表示不是唯一索引

  • key_name索引名稱: PRIMARY(主鍵索引)/xxx

  • Column_name索引作用的列:一列或者多列(如果某幾個條件經(jīng)常需要組合篩選則可以在這幾個列上建立索引)

  • 一個索引可以包含多個列,同一個列也可以對應多個索引

  • navicat工具:在ctrl+d設(shè)計表頁面,點擊索引,可以查看當前列上的索引(索引名稱、索引類型和索引方法等)

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

友情鏈接更多精彩內(nèi)容