6 mysql索引 6 MySQL索引種類

2021-10-18 03:41:06 字數 3468 閱讀 6234

1、普通索引

這是最基本的索引,它沒有任何限制,比如上文中為title欄位建立的索引就是乙個普通索引,myiasm中預設的btree型別的索引,也是我們大多數情況下用到的索引。

-–直接建立索引

create index index_name on table_name(column(length))

-–修改表結構的方式新增索引

alter table table_name add index index_name on (column(length))

-–建立表的時候同時建立索引

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))

--檢視索引

show index from table_name;

-–刪除索引

drop index index_name on table_name

2、 唯一索引

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

-–建立唯一索引

create unique index indexname on table_name(column(length))

-–修改表結構

alter table table_name add unique indexname on (column(length))

-–建立表的時候直接指定

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))

3、全文索引(fulltext)

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)

4.、單列索引、多列索引

多個單列索引與單個多列索引的查詢效果不同,因為執行查詢時,mysql只能使用乙個索引,會從多個索引中選擇乙個限制最為嚴格的索引。

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

平時用的sql查詢語句一般都有比較多的限制條件,所以為了進一步榨取mysql的效率,就要考慮建立組合索引。例如上表中針對title和time建立乙個組合索引:alter table article add index index_titme_time (title(50),time(10))。建立這樣的組合索引,其實是相當於分別建立了下面兩組組合索引:

–title,time

–title

為什麼沒有time這樣的組合索引呢?這是因為mysql組合索引「最左字首」的結果。簡單的理解就是只從最左面的開始組合。並不是只要包含這兩列的查詢都會用到該組合索引,如下面的幾個sql所示:

-–使用到上面的索引

select* from article whree title='測試' and time=1234567890;

select* from article whree utitle='測試';-–不使用上面的索引

select* from article whree time=1234567890;

缺點:雖然索引大大提高了查詢速度,同時卻會降低更新表的賴床,如對表進行insert、update、delete。因為更新表時,mysql不僅要儲存資料,還要儲存一下索引檔案。

建立索引會占用磁碟空間的索引檔案。

例項:測試建立索引前後,執行查詢語句的時間是否會縮短。(資料量太少看不出區別。可以建立10萬條資料,再進行實驗。)

查詢速度快原因:

沒有索引時,查詢語句會逐行匹配。

有索引時,會跳過前面的很多行,只找這一塊兒,一旦找到後,後面的很多行就找了。

執行查詢語句、檢視執行的時間

select shi.aname from booktest_areas as sheng inner join booktest_areas as shi on shi.pid= sheng.id and sheng.aname='河南省';

show profiles;

為表booktest_areas建立索引,建立索引後,執行查詢語句、檢視執行的時間

create index myindex on booktest_areas(aname(20));

select shi.aname from booktest_areas as sheng inner join booktest_areas as shi on shi.pid= sheng.id and sheng.aname='河南省';

show profiles;

6 mysql索引 6 MySQL高階 索引

索引 1.思考 在圖書館中是如何找到一本書的?一般的應用系統對比資料庫的讀寫比例在10 1左右 即有10次查詢操作時有1次寫的操作 而且插入操作和更新操作很少出現效能問題,遇到最多 最容易出問題還是一些複雜的查詢操作,所以查詢語句的優化顯然是重中之重 2.解決辦法 當資料庫中資料量很大時,查詢資料會...

6 mysql索引 Mysql索引詳解

索引 儲存引擎用於快速找到記錄的一種資料結構。索引型別 索引有很多種型別,如 b tree索引 雜湊索引 空間資料索引r tree 全文索引 主鍵索引等,在mysql 中,索引是在儲存引擎層而不是伺服器層實現的。所以沒有統一的索引標準 不同儲存引擎的索引工作方式並 不一樣,也不是所有儲存引擎都支援所...

C 問題6 Mysql索引分類

mysql索引包括普通索引 唯一索引 全文索引 單列索引 多列索引 空間索引 即不應用任何限制條件的索引,該索引可以在任何資料型別中建立。字段本身的約束條件可以判斷其值是否為空或唯一。使用unique引數可以設定唯一索引。建立該索引時,索引的值必須唯一。主鍵是一種特殊唯一索引。使用fulltext引...