MySQL索引(2)常見索引型別

2022-05-04 22:30:08 字數 3428 閱讀 6626

聚簇索引也稱為主鍵索引,其索引樹的葉子節點中存的是整行資料,表中行的物理順序與鍵值的邏輯(索引)順序相同。乙個表只能包含乙個聚集索引。因為索引(目錄)只能按照一種方法進行排序。

非聚簇索引也稱為普通索引,其索引樹的葉子節點中存的是主鍵的值。

mysql回表:

如果語句是 select * from user where id=3,即主鍵查詢方式,則只需要搜尋 主鍵索引樹。

如果語句是 select * from user where uid=23,即普通索引查詢方式,則需要先搜尋 普通索引樹,得到其對應的主鍵值為 3,再到主鍵索引樹搜尋一次。這個過程稱為回表。

sql語句:

1.直接建立索引

create

index index_name on

table(column(length))

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

alter

table table_name add

index index_name on (column(length))

3.建立表的時候同時建立索引

create

table `table

` (`id`

int(11) not

null

auto_increment ,

`title`

char(255) character

set utf8 collate utf8_general_ci not

null

,`content`

text

character

set utf8 collate utf8_general_ci null

,`time`

int(10) null

default

null

,primary

key(`id`),

index

index_name (title(length))

)

4.刪除索引

drop

index index_name on

table

如果在普通索引樹上的查詢已經直接提供了結果,不需要回表操作,這樣的普通索引叫做覆蓋索引。覆蓋索引的使用可以顯著提高查詢效率,是常見的mysql效能優化手段。

與普通索引類似,不同的就是:索引列的值必須唯一,但允許有空值(注意和主鍵不同)

sql語句:

1.建立唯一索引

create

unique

index indexname on

table(column(length))

2.修改表結構

alter

table table_name add

unique indexname on (column(length))

3.建立表的時候直接指定

create

table `table

` (`id`

int(11) not

null

auto_increment ,

`title`

char(255) character

set utf8 collate utf8_general_ci not

null

,`content`

text

character

set utf8 collate utf8_general_ci null

,`time`

int(10) null

default

null

,primary

key(`id`),

unique indexname (title(length))

mysql從3.23.23版開始支援全文索引和全文檢索,fulltext索引僅可用於 myisam 表;他們可以從char、varchar或text列中作為create table語句的一部分被建立,或是隨後使用alter table 或create index被新增。////對於較大的資料集,將你的資料輸入乙個沒有fulltext索引的表中,然後建立索引,其速度比把資料輸入現有fulltext索引的速度更為快。不過切記對於大容量的資料表,生成全文索引是乙個非常消耗時間非常消耗硬碟空間的做法。

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

create

table `table

` (`id`

int(11) not

null

auto_increment ,

`title`

char(255) character

set utf8 collate utf8_general_ci not

null

,`content`

text

character

set utf8 collate utf8_general_ci null

,`time`

int(10) null

default

null

,primary

key(`id`),

fulltext (content)

);

修改表結構新增全文索引

alter

table article add fulltext index_content(content)

直接建立索引

create fulltext index index_content on article(content)

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

alter

table table_name add

index index1 (col1,col2,col3)

這樣等於建立了三個組合索引:

col1,

col1,col2

col1,col2,col3

這個也叫索引的最左字首原則

在聯合索引的情況下,不需要索引的全部定義,只要滿足最左字首,就可以利用索引來加快查詢速度。這個最左字首可以是聯合索引的最左 n 個字段,也可以是字串索引的最左 m 個字元。最左字首原則的利用也可以顯著提高查詢效率,是常見的mysql效能優化手段。剛才的例子如果你查詢col1,col3,就不會走索引。

MySQL索引 索引型別

在mysql有兩種索引型別 hash b 樹 hash索引原理比較簡單就是利用了乙個hash表 說b 樹之前先要了解b 樹的資料結構。不廢話,先上圖。對b 樹做一些解釋,參考上圖。b 樹的資料都在葉子節點上 非葉子節點上的這些都是範圍。舉例 最上面的根節點上的資料是5,28,65代表的是它的三個子樹...

mysql索引型別介紹 mysql索引型別介紹

索引型別介紹 主鍵索引 primary key 要求關鍵字不能重複,也不能為null,同時增加主鍵約束 主鍵索引定義時,不能命名 唯一索引 unique index 要求關鍵字不能重複,同時增加唯一約束 普通索引 index 對關鍵字沒有要求 全文索引 fulltext key 關鍵字的 不是所有欄...

mysql索引型別介紹 mysql索引型別介紹

b 樹是多路平衡查詢樹,相對於平衡二叉樹,對父結點的直接子結點個數,不再僅限於2,可以指定m 自定義 這樣可以在樹的深度不大量增加的前提下,儲存更多的結點。b 樹是通常在檔案系統中使用。特點 a 樹的每個結點最多有m 自定義 子結點 b 若根結點不是葉子結點,則至少有兩個子結點 c 除根結點外的所有...