Mysql之如何建立索引以及組合索引

2021-07-09 04:17:12 字數 2473 閱讀 5771

資料庫中為何要建立索引?

這個問題對於做做簡單實驗的學生來說似乎並不需要過於了解,但是,如果處理的資料達到百萬以及以上的時候,合適的索引就能夠體現出很強大的優勢(mysql預設使用b+樹索引)。

建立索引的三種方式:

三種方式:

1. create index index_name on table_name (column_name).

2.alter

table

add index indexname [index_type] (column_name).

3. 建表的時候在後面附上

4. 建立索引時可以指定索引是公升序或者降序。

create index personindex on person (lastname desc) ;

如果欄位的屬性為字串,限制length的大小可以有效的提高查詢速率。

如長度為7的char型字段,在索引中可以設定為比7要小的長度。

5.建立組合索引:

建立組合索引在某些情況下會起到很好的效果。

create index personindex on person (lastname, firstname)

6.刪除索引

drop index [indexname] on mytable;

7.組合索引的一些注意事項:

比如對於如下的表:

create

table people (

last_name varchar(50) not

null,

first_name varchar(50) not

null,

dob date

notnull,

gender enum('m', 'f') not

null,

);如果在last_name、first_name和dob上建立乙個組合索引。

(1) 查詢必須從索引的最左邊的列開始。例如你不能利用索引查詢在某一天出生的人。

(2) 不能跳過某一索引列。例如,你不能利用索引查詢last name為smith且出生於某一天的人。

mysql中的索引型別:

1.full text(全文索引)

全文索引並不是和myisam一起誕生的,它的出現是為了解決where name like 「%word%」這類針對文字的模糊查詢效率較低的問題。在沒有全文索引之前,這樣乙個查詢語句是要進行遍歷資料表操作的,可見,在資料量較大時是極其的耗時的。

對搜尋引擎稍微有點了解的同學,肯定知道分詞這個概念,fulltext索引也是按照分詞原理建立索引的。西文中,大部分為字母文字,分詞可以很方便的按照空格進行分割。但很明顯,中文不能按照這種方式進行分詞。那又怎麼辦呢?這個向大家介紹乙個mysql的中文分詞外掛程式mysqlcft,有了它,就可以對中文進行分詞,當然還有其他的分詞外掛程式可以使用。

2.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 值相關聯。這樣要定位某一條記錄時就會非常麻煩,會浪費多次表資料的訪問,而造成整體效能低下。

3.b+樹索引

b+書索引具體參考**

mysql如何檢視表的索引以及如何刪除表的索引

檢視索引 show index from mytable mytable 是表名 查詢結果如下 查詢到唯一索引後,如何刪除唯一索引呢,使用如下命令 alter table mytable drop index mdl tag use ix mdl tag use ix是上表查出的索引名,key na...

資料庫建立索引以及索引失效問題

運算元據庫索引能起到優化資料庫查詢,提高查詢效率的作用。並且對也稍微大一點的資料量的服務來說,索引的建立是必須的,也是關鍵的。但是索引也要合理應用,不要遇到查詢就建索引,也不能亂建。如果造成索引失效那還不如不建。索引失效有的時候是因為自己的語句問題造成的。下面是幾種造成索引失效的幾種原因,一 以下的...

資料庫的優化之建立索引,以及SQL

在資料庫中,索引的含義與日常意義上的 索引 一詞並無多大區別 想想小時候查字典 它是用於提高資料庫表資料訪問速度的資料庫物件。a 索引可以避免全表掃瞄。多數查詢可以僅掃瞄少量索引頁及資料頁,而不是遍歷所有資料頁。b 對於非聚集索引,有些查詢甚至可以不訪問資料頁。c 聚集索引可以避免資料插入操作集中於...