MySQL索引型別及建立 刪除索引

2021-10-19 07:51:56 字數 2431 閱讀 2476

什麼是索引?個人理解,把資料比作詞典,索引就是詞典前面的拼音目錄,可以幫助我們快速查詢資料。本質是儲存引擎用於快速找到記錄的一種資料結構。儲存引擎首先在索引中找到對應值,然後根據匹配的索引記錄找到對應的資料行。

索引的實現依賴於儲存引擎,所以不同的儲存引擎所對應不同的索引型別,例如innodb採用的是b+tree型別,下表是不同儲存引擎對應的索引型別:

storage engine

index type

innodb

btree

myisam

btree

memory、heap

hash、btree

索引分為聚集(聚簇)索引和非聚集(聚簇)索引兩大類。

聚簇索引當使用主鍵(如果沒有指定主鍵,那麼 mysql會自動生成乙個6位元組的rowid作為主鍵)或唯一鍵建立表時,mysql會自動建立名為primary的特殊索引, 該索引稱為聚簇索引。資料儲存時根據聚簇索引的鍵值邏輯決定資料的儲存順序,聚簇索引一張表只存在乙個。

非聚集索引除聚簇索引外其他的索引就是非聚簇索引,一般包含普通索引、唯一索引、組合索引(聯合索引)、全文索引、空間索引等。

普通索引

mysql中基本索引型別,沒有什麼限制,允許在定義索引的列中插入重複值和空值,純粹為了查詢資料更快一點。

create

index 索引名稱 on 表名 ( 欄位名稱 )

//舉例

create

index index_house on detailed_list (house)

唯一索引

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

create

unique

index index_address on detailed_list(address)

組合索引(聯合索引)

基於多個字段建立的索引叫做組合索引,組合索引查詢要滿足最左原則

alter

table detailed_list add

index index_house_address (house,address)

上面sql中對house和address建立乙個組合索引,建立這樣的組合索引,其實是相當於分別建立了下面兩組組合索引:

–house,address

–house

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

–使用到上面的索引

select

*from detailed_list whree house=

'1401室'

and address=『上海寶山』

select

*from article whree house=

'1401室'

–不使用上面的索引

select

*from article whree address=『上海寶山』

全文索引(fulltext)

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

空間索引

空間索引是對空間資料型別的字段建立的索引,mysql中的空間資料型別有四種,geometry、point、linestring、polygon。在建立空間索引時,使用spatial關鍵字。要求,引擎為myisam,建立空間索引的列,必須將其宣告為not null。

檢視索引

show

index

from detailed_list

刪除索引

drop

index 索引名稱(key) on 表名

//舉例

drop

index index_house_address on detailed_list

mysql 建立空索引報錯 Mysql建立索引

建立索引 alter table tbl name add primary key column list 該語句新增乙個主鍵,這意味著索引值必須是唯一的,且不能為 null。alter table tbl name add unique index name column list 這條語句建立索...

mysql建立索引型別及索引建立的原則

索引型別 unique 唯一索引,一般為主鍵 normal 一般索引,普通字段,可做組合索引 索引方法 btree 1 選擇唯一性索引 唯一性索引的值是唯一的,可以更快速的通過該索引來確定某條記錄。例如,學生表中學號是具有唯一性的字段。為該字段建立唯一性索引可以很快的確定某個學生的資訊。如果使用姓名...

mysql按公升序建立索引 MySQL 降序索引

mysql 降序索引 簡介 在本教程中,您將了解mysql降序索引以及如何利用它來提高查詢效能。mysql降序索引簡介 降序索引是以降序儲存鍵值的索引。在mysql 8.0之前,您可以desc在索引定義中指定。但是,mysql忽略了它。與此同時,mysql可以以相反的順序掃瞄索引,但成本很高。以下語...