mysql索引分類

2021-07-25 12:54:09 字數 2877 閱讀 3834

mysql索引的概念

mysql索引是一種特殊檔案(innodb資料表上的索引是表空間的乙個組成部分),能加快資料庫的查詢時間。

索引分為聚族索引和非聚族索引,聚族索引是按照資料存放的物理位置為順序的,能提高多行檢索的速度,而非聚族索引對於單行的檢索很快。

mysql索引型別

1、普通索引

最基本的索引,沒有任何限制。

(1)直接建立索引

createindexindex_nameontable(column(length))

(2)修改表結構的方式新增索引

altertabletable_nameaddindexindex_nameon(column(length))

(3)建立表的時候同時建立索引

(4)刪除索引

dropindexindex_nameontable

2、唯一索引

索引列必須唯一(列內容必須唯一),但允許有空值(和主鍵不同),如果是組合索引,則列值的組合必須唯一,建立方法和普通索引類似

(1)建立唯一索引

createuniqueindexindexnameontable(column(length))

(2)修改表結構

altertabletable_nameadduniqueindexnameon(column(length))

(3)建立表的時候直接指定

3、全文索引(fulltext)

mysql從3.23.23版開始支援全文索引和全文檢索,fulltext索引僅可用於 myisam 表;

可以從char、varchar或text列中作為create table語句的一部分被建立,

或是隨後使用alter table 或create index被新增。

一般的資料庫搜尋都是用的sql的 like 語句,like 語句是不能利用索引的,每次查詢都是從第一條遍歷至最後一條,查詢效率極其低下。

這也就是為什麼很多程式都只提供標題搜尋的原因了,因為如果搜尋內容,那就更慢了,幾萬資料就跑不動了。

mysql 全文索引是專門為了解決模糊查詢提供的,可以對整篇文章預先按照詞進行索引,搜尋效率高,能夠支援百萬級的資料檢索。

(1)建立表的適合新增全文索引

(2)修改表結構新增全文索引

altertablearticleaddfulltext index_content(content)

(3)直接建立索引

createfulltextindexindex_contentonarticle(content)

4、單列索引與多列索引

多個單列索引與單個多列索引的查詢效果不同

5、組合索引(最左字首)

平時用的sql查詢語句一般都有比較多的限制條件,所以為了進一步榨取mysql的效率,就要考慮建立組合索引。

t_index_id_replynum_status 組合索引

相當於建立了id單列索引和id_replynum、id_replynum_status多列索引(和索引實現有關)

索引也會有它的缺點:雖然索引大大提高了查詢速度,同時卻會降低更新表的速度,如對表進行insert、update和delete。

因為更新表時,mysql不僅要儲存資料,還要儲存一下索引檔案。建立索引會占用磁碟空間的索引檔案。

一般情況這個問題不太嚴重,但如果你在乙個大表上建立了多種組合索引,索引檔案的會膨脹很快。

索引只是提高效率的乙個因素,如果你的mysql有大資料量的表,就需要花時間研究建立最優秀的索引,或優化查詢語句。

mysql索引分類

索引是在mysql的儲存引擎層中實現的,而不是在伺服器層實現的。所以每種儲存引擎的索引都不一定完全相同,也不是所有的儲存引擎都支援所有的索引型別。1 btree索引 最常見的索引型別,大多數引擎都支援b樹索引。2 hash索引 只有memory引擎支援,使用場景簡單。3 rtree索引 myisam...

mysql索引分類

mysql支援哪幾種索引 1 b 樹索引 o log n 關於b 樹索引,可以參考 mysql索引背後的資料結構及演算法原理 2 hash索引 a 僅僅能滿足 in 和 查詢,不能使用範圍查詢 b 其檢索效率非常高,索引的檢索可以一次定位,不像b tree 索引需要從根節點到枝節點,最後才能訪問到頁...

mysql索引分類

索引的分類 索引的型別 index class 普通索引 mysql中基本索引型別,沒有什麼限制,允許在定義索引的列中插入重複值和空值,純粹為了查詢資料更快一點。唯一索引 索引列中的值必須是唯一的,但是允許為空值 主鍵索引 是一種特殊的唯一索引,不允許有空值 全文索引 只能在char,varchar...