mysql索引型別:fulltext、normal、spatial、unique的詳細介紹
normal 普通索引
unique 唯一索引
full text 全文索引
spatial 空間索引
btree索引和hash索引的區別
在實際操作過程中,應該選取表中哪些字段作為索引?
normal 普通索引
表示普通索引,大多數情況下都可以使用
unique 唯一索引
表示唯一的,不允許重複的索引,如果該欄位資訊保證不會重複例如身份證號用作索引時,可設定為unique
約束唯一標識資料庫表中的每一條記錄,即在單錶中不能用每條記錄是唯一的(例如身份證就是唯一的),unique(要求列唯一)和primary key(primary key = unique + not null 列唯一)約束均為列或列集合中提供了唯一性的保證,primary key是擁有自動定義的unique約束,但是每個表中可以有多個unique約束,但是只能有乙個primary key約束。
mysql中建立unique約束
full text 全文索引
表示全文收索,在檢索長文字的時候,效果最好,短文本建議使用index,但是在檢索的時候資料量比較大的時候,現將資料放入乙個沒有全域性索引的表中,然後在用create index建立的full text索引,要比先為一張表建立full text然後在寫入資料要快的很多
fulltext 用於搜尋很長一篇文章的時候,效果最好。用在比較短的文字,如果就一兩行字的,普通的 index 也可以。
spatial 空間索引
空間索引是對空間資料型別的字段建立的索引,mysql中的空間資料型別有4種,分別是geometry、point、linestring、polygon。mysql使用spatial關鍵字進行擴充套件,使得能夠用於建立正規索引型別的語法建立空間索引。建立空間索引的列,必須將其宣告為not null,空間索引只能在儲存引擎為myisam的表中建立
btree索引和hash索引的區別
1、btree(b樹(可以是多叉樹))
2、hash(key,value) 這種方式對範圍查詢支援得不是很好
hash 索引結構的特殊性,其檢索效率非常高,索引的檢索可以一次定位,不像b-tree 索引需要從根節點到枝節點,最後才能訪問到頁節點這樣多次的io訪問,所以 hash 索引的查詢效率要遠高於 b-tree 索引。
可 能很多人又有疑問了,既然 hash 索引的效率要比 b-tree 高很多,為什麼大家不都用 hash 索引而還要使用 b-tree 索引呢?任何事物都是有兩面性的,hash 索引也一樣,雖然 hash 索引效率高,但是 hash 索引本身由於其特殊性也帶來了很多限制和弊端,主要有以下這些。
(1)hash 索引僅僅能滿足」=」,」in」和」<=>」查詢,不能使用範圍查詢。
由於 hash 索引比較的是進行 hash 運算之後的 hash 值,所以它只能用於等值的過濾,不能用於基於範圍的過濾,因為經過相應的 hash 演算法處理之後的 hash 值的大小關係,並不能保證和hash運算前完全一樣。
(2)hash 索引無法被用來避免資料的排序操作。
由於 hash 索引中存放的是經過 hash 計算之後的 hash 值,而且hash值的大小關係並不一定和 hash 運算前的鍵值完全一樣,所以資料庫無法利用索引的資料來避免任何排序運算;
(3)hash 索引不能利用部分索引鍵查詢。
對於組合索引,hash 索引在計算 hash 值的時候是組合索引鍵合併後再一起計算 hash 值,而不是單獨計算 hash 值,所以通過組合索引的前面乙個或幾個索引鍵進行查詢的時候,hash 索引也無法被利用。
(4)hash 索引在任何時候都不能避免表掃瞄。
前面已經知道,hash 索引是將索引鍵通過 hash 運算之後,將 hash運算結果的 hash 值和所對應的行指標資訊存放於乙個 hash 表中,由於不同索引鍵存在相同 hash 值,所以即使取滿足某個 hash 鍵值的資料的記錄條數,也無法從 hash 索引中直接完成查詢,還是要通過訪問表中的實際資料進行相應的比較,並得到相應的結果。
(5)hash 索引遇到大量hash值相等的情況後效能並不一定就會比b-tree索引高。
對於選擇性比較低的索引鍵,如果建立 hash 索引,那麼將會存在大量記錄指標資訊存於同乙個 hash 值相關聯。這樣要定位某一條記錄時就會非常麻煩,會浪費多次表資料的訪問,而造成整體效能低下。
在實際操作過程中,應該選取表中哪些字段作為索引?
為了使索引的使用效率更高,在建立索引時,必須考慮在哪些欄位上建立索引和建立什麼型別的索引,有7大原則:
1.選擇唯一性索引
2.為經常需要排序、分組和聯合操作的字段建立索引
3.為常作為查詢條件的字段建立索引
4.限制索引的數目
5.盡量使用資料量少的索引
6.盡量使用字首來索引
7.刪除不再使用或者很少使用的索引
8. 經常更新修改的字段不要建立索引(針對mysql說,因為字段更改同時索引就要重新建立,排序,而orcale好像是有這樣的機制字段值更改了,它不立刻建立索引,排序索引,而是根據更改個數,時間段去做平衡索引這件事的)
9、不推薦在同一列建多個索引
MySQL索引介紹
索引由資料庫表中一列或者多列組合而成,其作用是提高對錶中資料的查詢速度。建立索引是指在某個表的一列或者多列上建立乙個索引,用來提高對錶的訪問速度,建立索引由三種方法 在建立表的時候建立,在已存在的表上建立和用alter table語句建立。建立索引的基本語法格式 asc引數表示公升序排列,desc引...
MySQL索引介紹
簡單理解為 排好序的快速查詢資料結構 一般來說索引本身也很大,不可能全部儲存在記憶體中,因此索引往往以索引檔案的形式儲存在磁碟上。我們平常所說的索引,如果沒有特別指明,一般都是指b樹結構組織的索引 b 樹索引 b 樹索引檢索原理 1 類似圖書館書目索引,提高資料檢索的效率,降低資料庫的io成本。2 ...
Mysql索引介紹
索引是在建立表的時候會自動生成乙個主鍵 以主鍵生成的 索引,所以我們可以直接搜尋索引 我們也可以建立 普通索引 create index t job index on e user t job 建立索引名 被建立的表 建立的列名 格式 所以索引可以多個.刪除普通索引 drop index t job...