資料庫(六)索引

2021-08-20 06:59:58 字數 3927 閱讀 5963

索引是一種特殊的資料庫結構,是提高資料庫效能的重要方式,可以用來快速查詢資料庫表中的特定記錄,mysql中所有的資料型別都可以被索引。mysql的索引包括普通索引、唯一性索引、全文索引、單列索引、多列索引和空間索引等。

6.1索引概述

在mysql中,索引由資料表中一列或多列組合而成,建立索引的目的是為了優化資料庫的查詢速度。其中,使用者建立的索引指向資料庫中具體資料所在位置。當使用者通過索引查詢資料庫中的資料時,不需要遍歷所有資料庫中的所有資料,大幅度提高了查詢效率。

索引是一種將資料庫中單列或者多列的值進行排序的結構。應用索引,可以大幅度提高查詢的速度。使用者通過索引查詢,不但可以提高查詢速度,也可以降低伺服器的負載。使用者查詢資料時,系統可以不必遍歷資料表中的所有記錄,而是查詢索引列。一般過程的資料查詢是通過遍歷全部資料,並尋找資料庫中的匹配記錄而實現的。而索引就像一本書的目錄,在查詢過程中,縮短大量時間,幫助使用者有效地提高查詢速度。所以,使用索引可以有效地提高資料庫的整體效能。

應用mysql資料庫時,並非使用者在查詢資料的時候,總需要應用索引來優化查詢。索引可以提高檢索資料的速度,對於依賴關係的子表和父表之間的聯合查詢時,可以提高查詢速度,並且可以提高整體的系統效能。但是,建立索引和維護需要耗費時間,並且該耗費時間與資料量的大小成正比;另外,索引需要占用物理空間,給資料的維護造成很多麻煩。

整體來說,索引可以提高查詢的速度,但是會影響使用者運算元據庫的插入操作。因為,向有索引的表中插入記錄時,資料庫系統會按照索引進行排序。所以,使用者可以將索引刪除後,插入資料,當資料插入操作完成後,使用者可以重新建立索引。

mysql索引分類

1.普通索引

普通索引,即不應用任何限制條件的索引,該索引可以在任何資料型別中建立。字段本身的約束條件可以判斷其值是否為空或者唯一。建立該型別索引後,使用者在查詢時候,便可以通過索引進行查詢。在某資料表的某一字段中,建立普通索引後,使用者需要查詢資料時,只需根據該索引進行查詢即可。

2.唯一性索引

使用unique引數可以設定唯一索引。建立該索引時,索引的值必須唯一,通過唯一索引,使用者可以快速定位某條記錄,主鍵是一種特殊唯一索引。

3.全文索引

使用fulltext引數可以設定索引為全文索引。全文索引只能建立在char,varchar或者text型別的字段上。查詢資料量較大的字串型別的字段時,使用全文索引可以提高查詢速度。預設情況下,應用全文搜尋大小寫不敏感。

4.單列索引

單列索引即只對應乙個欄位的索引。其可以包括上述敘述的3種索引方式。應用該索引的條件只需要保證該索引值對應乙個字段即可。

5,多列索引

多列索引是在表的多個欄位上建立乙個索引。該索引指向建立時對應的多個字段,使用者可以通過這幾個字段進行查詢。要想應用該索引,使用者必須使用這些欄位中的第乙個字段

6.空間索引

使用spatial引數可以設定索引為空間索引。空間索引只能建立在空間資料型別上,這樣可以提高系統獲取空間資料的效率。mysql中只有myisam儲存引擎支援空間檢索,而且索引的字段不能為空值。

--普通索引建立

create

table score(

id int(11) auto_increment primary

keynot

null,

name varchar(50) not

null,

math int(5) not

null,

english int(5) not

null,

chinese int(5) not

null,

index(id));

--建立唯一性索引

create

table address(

id int(11) auto_increment primary

keynot

null,

name varchar(50),

address varchar(200),

unique index address(id asc));

--建立唯一性索引的時候,需要使用unique引數進行約束

--建立全文索引

--全文索引的建立只能作用在char,varchar,test型別的字段上,建立全文索引需要使用fulltext引數進行約束

create

table cards(

id int(11) auto_increment primary

keynot

null,

name varchar(50),

number bigint(11).

info varchar(50),

fulltext key cards_info(info)) engine=myisam;

--建立單列索引

create

table telephone(

id int(11) primary

key auto_increment not

null,

name varchar(50) not

null,

tel varchar(50) not

null,

index tel_num(tel(20))

);

--建立多列索引,指定表的多個字段實現

create

table information(

id int(11) auto_increment primary

keynot

null,

name varchar(50) not

null,

*** varchar(5) not

null,

birthday varchar(50) not

null,

index info(name,***)

);--在多列索引中,只有查詢條件使用了這些欄位中的第乙個欄位時,索引才會被使用

--建立空間索引時,需要設定spatial引數,只有myisam型別表支援該型別索引

create

table list(

id int(11) primary

key auto_increment not

null,

goods geometry not

null,

spatial index listinfo(goods)

)engine=myisam;

在已建立的資料表中建立索引

--建立普通索引

create index stu_info on studentinfo(sid);

--建立唯一索引

create

unique index index1_id on index1(cid);

--建立全文索引

create fulltext index index2_info on index2(info);

--建立單列索引

create index index3_addr on index3(address(4));

--建立多列索引

create index index4_na on index4(name,address);

修改資料表結構新增索引

--新增普通索引

alter

table studentinfo add index timer (time(20));

--刪除索引

drop index id on address;

六 資料庫規劃索引

chapter 6 規劃索引 現在我們先來做一下實驗,看一看有無索引對查詢速度的影響 在乙個有 1500000 條紀錄的表中,選擇一條資料,在無索引時用時 用時 9秒,而有索引時用時 0秒,開啟執行計畫可以看到更加詳細的紀錄 如果你訪問一家 但是每開啟乙個網頁要等待 60秒,你還願意再次訪問嗎?由於...

MySQL資料庫(六) 索引

索引是一種提高查詢效率的資料結構 b樹或雜湊結構 索引是建立在資料庫表中,對資料庫表中的一列或多列值進行排序的結果,好處是提高查詢效率。1 普通索引 無任何限制,可以給任意字段建立普通索引。2 唯一性索引 使用unique修飾的字段,值不可以重複。3 主鍵索引 使用primary key修飾的字段自...

資料庫 資料庫索引

索引是儲存引擎用於快速找到記錄的一種資料結構。索引以檔案的形式儲存在磁碟中。索引可以包含乙個或多個列的值。儲存引擎查詢資料的時候,先在索引中找對應值,然後根據匹配的索引記錄找到對應的資料行。1.b tree索引 2.雜湊索引 myisam和innodb儲存引擎 只支援btree索引,也就是說預設使用...