mysql資料庫之索引index

2021-09-28 14:08:47 字數 3392 閱讀 5466

什麼是索引

mysql資料庫索引的建立對於mysql的高效執行是很重要的,索引可以大大提高mysql的檢索速度。

在關係型資料庫中,索引是一種單獨的、物理的對資料庫表中一列或多列的值進行排序的一種儲存結構,它是某個表中一列或若干列值的集合和相應的指向表中物理標識這些值的資料頁的邏輯指標清單。

索引是為了加速對錶中資料行的檢索而建立的一種分散的儲存結構

索引的作用相當於圖書的目錄,可以根據目錄中的頁碼快速找到所需的內容。

索引是針對表而建立的,它是由資料頁面以外的索引頁面組成的,每個索引頁面中的行都會含有邏輯指標,以便加速檢索物理資料。

mysql索引種類/型別有哪些

根據資料庫的功能,可以在資料庫設計器中建立4三種索引:

主鍵索引、唯一索引、普通索引全文索引空間索引

主鍵索引:加速查詢 + 列值唯一(不可以有null)+ 表中只有乙個

唯一索引unique:加速查詢 + 列值唯一(可以有null)

普通索引normal:僅加速查詢

全文索引fulltext:對文字的內容進行分詞,進行搜尋

空間索引spatial:空間索引。

【單列索引:單個列上面建的索引

聯合索引:多列值組成乙個索引,專門用於組合搜尋,其效率大於多個單列索引合併】

mysql索引方法有哪些

mysql目前主要有右邊幾種索引方法:hash,fulltext,btree,rtree。

hash:由於hash的唯一(幾乎100%的唯一)及類似鍵值對的形式,很適合作為索 引,但效率不高。

fulltext全文索引,目前只有myisam儲存引擎支援。其可以在create table ,alter table ,create index 使用,不過目前只有 char、varchar ,text 列上可以建立全文索引。

btree:b樹索引,就是一種將索引值按一定的演算法,存入乙個樹形的資料結構中(二叉樹),每次查詢都是從樹的入口root開始,依次遍歷node,獲取leaf。這是mysql裡預設和最常用的索引方法。

rtree:rtree在mysql很少使用,僅支援geometry資料型別,支援該型別的儲存引擎只有myisam、bdb、innodb、ndb、archive幾種。

什麼情況需要建立索引(索引是建立在資料庫表中的某些列的上面的)

在主鍵列上、唯一鍵列上、外來鍵;

在經常用在join連線的列上,這些列主要是一些外來鍵,可以加快連線的速度;

在經常需要搜尋的列上,也就是where條件後的;

在經常需要排序的列上,也就是order by後的;

在經常需要分組的列上,也就是group by後的;

在經常需要根據範圍進行搜尋的列上;

什麼情況不需要建立索引

在查詢中很少使用的列;

在查詢中參考的列不應該建立索引,(比如name名字);

對於那些只有很少資料值的列也不應該增加索引,(比如age年齡、***性別);

當修改操作遠遠多於檢索操作時,這個列不應該建立索引;

對於那些定義為text, image和bit資料型別的列不應該增加索引;

索引的優點缺點分別是

優點:1.大大加快資料的檢索速度;

2.建立唯一性索引,保證資料庫表中每一行資料的唯一性;

3.加速表和表之間的連線;

4.在使用分組和排序子句進行資料檢索時,可以顯著減少查詢中分組和排序的時間。

缺點:1.索引需要佔物理空間。

2.當對表中的資料進行增加、刪除和修改的時候,索引也要動態的維護,降低了資料的維護速度。

什麼情況索引會失效

1.如果條件中有or,即使其中有條件帶索引,只要有其他條件不是索引的會失效(這也是為什麼盡量少用or的原因,解決辦法是把or的所有條件都建乙個索引)

比如:select * from student where id=『***』 or name=』;其中id是索引,name不是索引,會失效。

2.對於聯合索引,不按照最左原則(不按照左字首),索引會失效(少查不會失效,跳空查詢會失效,順序亂也會失效)

3.like模糊查詢是以%開頭的,會失效

比如:select * from student where id like 『%***』 ;其中id是索引,會失效。

4.如果列型別是字串,那一定要在條件中將資料使用引號引用起來,否則不使用索引。

比如:select * from student where id =1008; 其中id是索引,會失效。

比如:select * from student where id =『1008』 ;其中id是索引,不會失效。

建立索引語句

單獨建立索引:

例如create unique index 索引的名字 on 表名(表的某一列列名);

例如create index 索引的名字 on 表名(表的某一列列名);

例如create index 索引的名字 on 表名(列名1,列名2);

建立表的時候指定索引:

例如create table tablename ( […], unique 索引的名字 (表的某一列列名) );

修改表:

例如alter table 表名 add unique 索引的名字 (表的某一列列名);

修改索引語句

alter index 舊索引名字 rename to 新索引名

刪除索引語句

drop index 索引名 on 表名

alter table 表名 drop index 索引名;

查詢索引的語句

select * from user_indexs;(當前使用者下所有索引)

select * from user_indexs where table_name=『***』; (查詢某個表的所有索引,表名要大寫)

select * from user_indexs where index_name=『***』;(查詢具體的索引,索引名要大寫)

注意事項

考慮已在表上建立的索參數量。最好避免在單個表上有很多索引。

建議單張表,包含唯一索引在內最好不要超過3個索引。

MySQL資料庫之索引

索引是一種特殊的檔案 innodb資料表上的索引是表空間的乙個組成部分 它們包含著對資料表裡所有記錄的引用指標。更通俗的說,資料庫索引好比是一本書前面的目錄,能加快資料庫的查詢速度。基本的索引型別,值可以為空,沒有唯一性的限制。alter table table name add index 欄位名...

mysql資料庫樹 MySQL資料庫索引之B 樹

一 b 樹是什麼 b 樹是一種樹型資料結構,通常用於資料庫和作業系統的檔案系統中。b 樹的特點是能夠保持資料穩定有序,其插入與修改操作擁有較穩定的對數時間複雜度。b 樹元素自底向上插入,這與二叉樹恰好相反。b 樹的創造者rudolf bayer沒有解釋b代表什麼。最常見的觀點是b代表平衡 balan...

資料庫mysql索引 資料庫 mysql索引

mysql 索引 mysql索引的建立對於mysql的高效執行是很重要的,索引可以大大提高mysql的檢索速度。打個比方,如果合理的設計且使用索引的mysql是一輛蘭博基尼的話,那麼沒有設計和使用索引的mysql就是乙個人力三輪車。索引分單列索引和組合索引。單列索引,即乙個索引只包含單個列,乙個表可...