資料庫中為何要建立索引?
這個問題對於做做簡單實驗的學生來說似乎並不需要過於了解,但是,如果處理的資料達到百萬以及以上的時候,合適的索引就能夠體現出很強大的優勢(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 聚集索引可以避免資料插入操作集中於...