mysql索引的概念
mysql索引是一種特殊檔案(innodb資料表上的索引是表空間的乙個組成部分),能加快資料庫的查詢時間。
索引分為聚族索引和非聚族索引,聚族索引是按照資料存放的物理位置為順序的,能提高多行檢索的速度,而非聚族索引對於單行的檢索很快。
mysql索引型別
1、普通索引
最基本的索引,沒有任何限制。
(1)直接建立索引
create
index
index_name
on
table
(
column
(length))
(2)修改表結構的方式新增索引
alter
table
table_name
add
index
index_name
on
(
column
(length))
(3)建立表的時候同時建立索引
(4)刪除索引
drop
index
index_name
on
table
2、唯一索引
索引列必須唯一(列內容必須唯一),但允許有空值(和主鍵不同),如果是組合索引,則列值的組合必須唯一,建立方法和普通索引類似
(1)建立唯一索引
create
unique
index
indexname
on
table
(
column
(length))
(2)修改表結構
alter
table
table_name
add
unique
indexname
on
(
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)修改表結構新增全文索引
alter
table
article
add
fulltext index_content(content)
(3)直接建立索引
create
fulltext
index
index_content
on
article(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...