索引也是一張表,該錶儲存了主鍵與索引字段,並指向實體表的記錄。
1、所有列(字段)都可以被索引
2、大大提高查詢速度
1、索引會降低更新表的速度(更新表時mysql不僅需儲存資料還要儲存索引檔案)
2、建立索引會占用磁碟空間
3、資料越大索引維護越耗時
1、對經常更新的表避免建立過多索引,對經常用於查詢的字段應建立索引
2、資料量小盡量不用索引
3、在唯一性強的列上適合建立索引
從邏輯角度
分為四類:單列索引(普通索引,唯一索引,主鍵索引)、組合索引、全文索引、空間索引
1)單列索引:乙個索引只包含單個列,但乙個表中可以有多個單列索引。
普通索引:mysql中基本索引型別沒有什麼限制,允許在定義索引的列中插入重複值和空值
唯一索引:索引列中的值必須是唯一的,但是允許為空值
主鍵索引:是一種特殊的唯一索引,不允許有空值
2)組合索引:
在表中的多個字段組合上建立的索引,只有在查詢條件中使用了這些欄位的左邊欄位時,索引才會被使用,使用組合索引時遵循最左字首集合
3)全文索引:
只有在myisam引擎上才能使用,只能在char,text,varchar型別欄位上使用。索引型別為fulltext
允許有重複值和空值,全文索引需要配合match against操作使用。
4)空間索引:
對空間資料型別的字段建立的索引,mysql中的
空間資料型別有四種,geometry、polygon、linestring、point。在建立空間索引時,使用spatial關鍵字。
要求:引擎為myisam,建立空間索引的列,必須將其宣告為not null
從物理儲存角度
分為聚集索引和非聚集索引。
1)聚集索引:
資料行的物理順序與列值(一般是主鍵的那一列)的邏輯順序相同,乙個表中只能擁有乙個聚集索引。像新華字典的拼音檢索。
2)非聚集索引:
索引的邏輯順序與磁碟上行的物理儲存順序不同,乙個表中可以擁有多個非聚集索引。像新華字典的偏旁檢索。
從資料結構角度
1)hash索引
2)b+tree索引
注意:索引是在儲存引擎中實現的,也就是說不同的儲存引擎,會使用不同的索引
建立索引的sql語句:
直接建立索引:
普通索引
create
index index_name
on table_name (
column
(length)
);
唯一索引
create
unique
index index_name
on table_name (
column
(length)
);
修改表結構新增索引:
普通索引
alter
table table_name
addindex index_name on(
column
(length)
);
唯一索引
alter
table table_name
addindex
unique
index index_nameon(
column
(length)
);
組合索引
alter
table table_name
addindex index_name(column1,column2,..
.);
全文索引
alter
table table_name
add fulltext index_name(
column
);
建立表時建立普通索引:
普通索引
create
table table_name(..
....
index index_name(
column
(length)))
;
唯一索引
create
table table_name(..
....
unique
index index_name(
column
(length)))
;
主鍵索引
create
table table_name(..
....
primary
key(
column))
;
刪除索引:
drop
index index_name on table_name;
顯示索引資訊:
show
index
from table_name;\g
新增鏈結描述
新增鏈結描述
新增鏈結描述
mysql索引基礎 Mysql 索引基礎
什麼是索引?為什麼要建立索引?索引,其實就是目錄。索引,用於快速找出在某個列中有某個特定值的行。不使用索引,mysql必須從第一條記錄開始查詢整張表,直到找出相關的行,那麼表越大,查詢資料所花費的時間就越多。假如表中查詢的列有乙個索引 目錄 mysql能夠快速定位到達乙個位置去搜尋資料檔案,而不必查...
MySQL中索引的基礎知識
本文是關於mysql中索引的基礎知識。主要講了索引的意義與原理 建立與刪除的操作。並未涉及到索引的資料結構 高效能策略等。一 概述 1.索引的意義 用於提高資料庫檢索資料的效率,提高資料庫效能。資料庫在檢索資料時,如果沒有索引,則只能從第一條記錄開始逐條查詢,效率很低,新增索引可以明顯提公升效率。2...
mysql索引基礎
1.建立索引 alter table table name add index index name column list alter table table name add unique index name column list alter table table name add pri...