索引
- 一種獨立於表的模式對象,可以存儲在與表不同的磁盤或表空間中
- 只能創建在表上,不能創建到視圖上
- 索引被刪除或損壞,不會對錶產生影響,隻影響查詢速度
- 在刪除一個表時,基與該表的所有索引會自動被刪除
優點
- 能大大加快數據的檢索速度,這是創建索引最主要的原因
- 加速數據庫表之間的連接
- 創建唯一索引,保證數據庫表中每一行數據的唯一性
缺點
- 佔用物理空間
- 創建和維護索引需消耗時間,時間隨着數據量的增加而增加
- 對錶中數據進行增,刪,改時,索引也需要維護,降低數據維護速度
創建索引
- 自動創建:在定義primary key 或 unique 約束後,系統會自動的在相應的列上創建唯一性索引
- 手動創建:create index 索引名 on table (字段名,…) 可放多個列
索引分類
普通索引
create index emp_sal_ix on employees (salary)
唯一性索引
create unique index 索引名 on table (字段名,…)
create unique index emp_name_ix on employees (empname)
主鍵
primary key 在一個表上只能創建一個,主鍵字段不能重複,不能爲null
全文索引
create fulltext index 索引名 on table (字段名,…)
什麼時候創建索引
- 經常用作查詢選擇的字段,建立索引
- 經常作用表連接的屬性上,建立索引
- 經常出現在關鍵字order by,group by,distinct後面的字段,建立索引
- 列中數據值分佈範圍很廣
什麼時候不要創建索引
- 表很小
- 不是經常作爲查詢的字段
- 表經常更新
索引失效
- 如果條件中有or,即使其他有條件帶索引也不會使用(這就是問爲啥儘量少使用or的原因)
- like查詢以%開頭
刪除索引
- drop index 索引名
- drop table 表名 (基於表的所有索引都會被刪除)
數據庫中的索引結構
因爲在使用二叉樹的時候,由於二叉樹的深度過大而造成I/O讀寫過於頻繁,進而導致查詢效率低下。因此採取多叉樹結構,B樹的各種操作能使B樹保持較低的高度
B樹又叫平衡多路查找樹,一顆m階的B樹的特性:
- 樹中的每個結點最多含有m個孩子(m>=2)
- 除根結點和葉子結點外,其他每個結點至少有ceil(m/2)個孩子 (ceil(x)爲一個取上限的函數)
- 若根結點不是葉子結點,則至少有2個孩子(根結點爲葉子結點,整棵樹只有一個根結點,沒有孩子)