MySQL整理及學習(四) 索引

2021-10-01 09:16:25 字數 3451 閱讀 8468

什麼是索引

索引是一種特殊的檔案,它們包含著對資料表裡所有記錄的引用指標。更通俗的說,資料庫索引好比是一本書前面的目錄,能加快資料庫的查詢速度。濫用卻會適得其反。

利弊提高查詢速度;

降低更新表的速度,如對表進行insert、update和delete。因為更新表時,不僅要儲存資料,還要儲存一下索引檔案。

建立索引會占用磁碟空間的索引檔案。一般情況這個問題不太嚴重,但如果你在乙個大表上建立了多種組合索引,索引檔案的會增長很快。

建立與刪除

建表語句一起建立索引

create

table table_name[col_name data

type][

unique

|fulltext]

[index

|key

][index_name]

(col_name[length])[

asc|

desc

]

unique|fulltext為可選引數,分別表示唯一索引、全文索引

index和key為同義詞,兩者作用相同,用來指定建立索引

index_name指定索引的名稱,為可選引數,如果不指定,預設col_name為索引值

col_name為需要建立索引的字段列,該列必須從資料表中該定義的多個列中選擇

length為可選引數,表示索引的長度,只有字串型別的字段才能指定索引長度

asc或desc指定公升序或降序的索引值儲存

索引型別

普通索引

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

// 建立1

create

index index_name on

table

(column

(length)

)// 建立2

alter

table table_name add

index index_name on

(column

(length)

)// 刪除

drop

index index_name on

table

唯一索引

索引列的值必須唯一,但允許有空值。如果是組合索引,則列值的組合必須唯一。

// 建立1

create

unique

index indexname on

table

(column

(length)

)// 建立2

alter

table table_name add

unique indexname on

(column

(length)

)// 刪除

drop

index index_name on

table

主鍵索引

是一種特殊的唯一索引,乙個表只能有乙個主鍵,不允許有空值。一般是在建表的時候同時建立主鍵索引

create

table

`table_name`

(`id`

int(11)

notnull

auto_increment

,`title`

char

(255

)not

null

,primary

key(

`id`))

;

組合索引

指多個欄位上建立的索引,只有在查詢條件中使用了建立索引時的第乙個字段,索引才會被使用。使用組合索引時遵循最左字首集合

alter

table

`table

`add

index name_city_age (name,city,age)

;

全文索引

主要用來查詢文字中的關鍵字,而不是直接與索引中的值相比較。fulltext索引跟其它索引大不相同,它更像是乙個搜尋引擎,而不是簡單的where語句的引數匹配。fulltext索引配合match against操作使用,而不是一般的where語句加like。它可以在create table,alter table ,create index使用,不過目前只有char、varchar,text 列上可以建立全文索引。

// 建立1

create

table

`table`(

`id`

int(11)

notnull

auto_increment

,`title`

char

(255

)character

notnull

,`content`

text

character

null,`

time

`int(10

)null

default

null

,primary

key(

`id`),

fulltext (content));

// 建立2

alter

table article add fulltext index_content(content)

// 建立3

create fulltext index index_content on article(content)

使用技巧

索引不會包含有null值的列

只要列中包含有null值都將不會被包含在索引中,復合索引中只要有一列含有null值,那麼這一列對於此復合索引就是無效的。所以我們在資料庫設計時不要讓字段的預設值為null。

使用短索引

對串列進行索引,如果可能應該指定乙個字首長度。例如,如果有乙個char(255)的列,如果在前10個或20個字元內,多數值是惟一的,那麼就不要對整個列進行索引。短索引不僅可以提高查詢速度而且可以節省磁碟空間和i/o操作。

索引列排序

查詢只使用乙個索引,因此如果where子句中已經使用了索引的話,那麼order by中的列是不會使用索引的。因此資料庫預設排序可以符合要求的情況下不要使用排序操作;盡量不要包含多個列的排序,如果需要最好給這些列建立復合索引。

like語句操作

一般情況下不推薦使用like操作,如果非使用不可,如何使用也是乙個問題。like 「%aaa%」 不會使用索引而like 「aaa%」可以使用索引。

不使用not in和<>操作

不要在列上進行運算

這將導致索引失效而進行全表掃瞄,例如

select

*from table_name where

year

(column_name)

<

2017

;

mysql 整理索引 Mysql索引整理

1 mysql基本單位是頁,大小為16kb 16384 1024 頁是為了增加查詢效率,減少io的互動 區域性性原理 2 頁與頁之間是雙向鍊錶,插入的時候會根據主鍵id進行排序 單葉資料結構.jpg 3 在頁上有乙個頁目錄,相當於把資料進行分組,存放的是當前組最小的主鍵id,指標並且指向對應的資料 ...

mysql 索引 磁碟整理 mysql 索引整理

1 只對 where 和 order by 子句中需要的列新增索引,多餘的索引智慧型導致不必要的硬碟空間愛你消耗。每次修改表資訊時會更新索引,因此有索引的表效能會相應降低。2 對於要使用索引的列要使用屬性 not null 這樣就永遠不會儲存 null 值。3 最好用唯一化索引,一般情況下,當查詢優...

mysql 整理 索引

一 在 command line client 中進行複製 在命令視窗ctrl c是不起作用的,只能靠右擊彈出的選單中的功能。可以這樣做 右擊 選擇 標記 然後用滑鼠拖動要複製的內容,然後在合適的位置右擊 選擇 複製 索引 一 索引的原理 對要查詢的字段建立索引其實就是把該字段按照一定的方式排序 建...