mysql的索引介紹

2021-09-22 12:50:57 字數 2701 閱讀 2768

什麼是索引?

簡單的來說,索引就是相當乙個目錄,舉個栗子,我現在想在一張學生表中查詢叫李明的學生,沒有索引的話,mysql執行全盤掃瞄(理解為for迴圈),並且掃瞄的是資料庫中的所有字段。如果我在name這個欄位上建立乙個索引,那麼只需要去查詢name這一列,然後在將這一列的值取出來就好。

索引的優缺點

任何事物都是一種雙刃劍,有優點必然有缺點。

索引的優點很明顯:查詢速度快。

索引的缺點:索引也是表中的資訊,索引如果使用不恰當,反而會使查詢速度降低。

下面乙個例子看一下用索引查詢和不用索引查詢的時間。

city表結構如下:

create table `city` (

`id` int(11) not null auto_increment,

`name` char(35) not null default '',

`countrycode` char(3) not null default '',

`district` char(20) not null default '',

`population` int(11) not null default '0',

`test` varchar(20) default null,

primary key (`id`),

key `countrycode` (`countrycode`),

constraint `city_ibfk_1` foreign key (`countrycode`) references `country` (`code`)

) engine=innodb auto_increment=4080 default charset=latin1

我們查詢人口大於200000的城市資訊:

右下角時間為0.469秒

下面我們加上索引來查一下:

重新修改表結構:

create table `city` (

`id` int(11) not null auto_increment,

`name` char(35) not null default '',

`countrycode` char(3) not null default '',

`district` char(20) not null default '',

`population` int(11) not null default '0',

`test` varchar(20) default null,

primary key (`id`),

key `countrycode` (`countrycode`),

key `testindex` (`population`),

constraint `city_ibfk_1` foreign key (`countrycode`) references `country` (`code`)

) engine=innodb auto_increment=304080 default charset=latin1

我們在population加上了普通索引,下邊來查詢:

右下角時間0.016秒,效率提交了約30倍,可見適當的加上所以還是很必要的。

索引分類

普通索引:上述使用的就是普通索引

語法:alter table 表名 add index 索引名('欄位名')

create index on 表名(列名);

唯一索引:字段設定唯一

主鍵也是唯一索引,因為主鍵字段必須是唯一的。

全文索引:可以在varchar,char,text上邊建立 

這個全文索引我在用mysql8.0的時候遇到一些問題,詳見我的部落格置頂,去看看

多列索引:可以建立基於多個欄位的索引

使用其中的乙個欄位去搜尋也可以作為普通索引。

合理使用比單列索引效率更高。遵循最左匹配原則(下邊詳講)

索引在mysql是怎麼儲存的?

索引在mysql中是通過b樹,b+樹,r-樹以及雜湊型別。

最左匹配原則:

通過上面了解了索引的儲存方式以後,可以更好的了解最左匹配原則:

將age,***,grade作為多列索引。

select * from test where age<10 and *** ='man' and grade<5

查詢的時候就會先去查詢age<10的資料,然後在這點資料中找***=『man』的資料最後再進行篩選出grade<5的資料。

但是如果我把查詢條件順序修改一下,那麼他的執行是怎麼執行的呢?

select * from test where grade<5  and *** ='man' and age<10

但是這條資料並不是並不是向上述那樣執行的,那麼不是最左匹配原則嗎?

這是因為mysql中存在查詢優化器,他會去判斷這條語句怎麼執行效率最高,然後生成執行計畫。

MySQL索引介紹

索引由資料庫表中一列或者多列組合而成,其作用是提高對錶中資料的查詢速度。建立索引是指在某個表的一列或者多列上建立乙個索引,用來提高對錶的訪問速度,建立索引由三種方法 在建立表的時候建立,在已存在的表上建立和用alter table語句建立。建立索引的基本語法格式 asc引數表示公升序排列,desc引...

MySQL索引介紹

簡單理解為 排好序的快速查詢資料結構 一般來說索引本身也很大,不可能全部儲存在記憶體中,因此索引往往以索引檔案的形式儲存在磁碟上。我們平常所說的索引,如果沒有特別指明,一般都是指b樹結構組織的索引 b 樹索引 b 樹索引檢索原理 1 類似圖書館書目索引,提高資料檢索的效率,降低資料庫的io成本。2 ...

Mysql索引介紹

索引是在建立表的時候會自動生成乙個主鍵 以主鍵生成的 索引,所以我們可以直接搜尋索引 我們也可以建立 普通索引 create index t job index on e user t job 建立索引名 被建立的表 建立的列名 格式 所以索引可以多個.刪除普通索引 drop index t job...