索引是對資料庫表中一列或多列的值進行排序的一種結構,使用索引可快速訪問資料庫表中的特定資訊(from 百科)
索引是一種特殊的檔案(innodb資料表上的索引是表空間的乙個組成部分),它們包含著對資料表裡所有記錄的引用指標。
其實可以這麼理解,索引就等於是字典的查詢目錄,你是在字海浬查東西快還是通過查詢目錄來查詢快呢,顯而易見。
索引種類:聚簇索引和非聚簇索引,聚簇索引是按照資料存放的物理位置為順序的。
注意:不是說索引越多就越好,索引會增加插入和更新表的開銷,對於經常要插入和更新缺很少查詢的表,建議不設定索引,所以具體情況需要具體分析。
普通索引
關鍵字:index
------------------index-------------------
create index index_name on table_name(column_name(length))
alter
table table_name add index index_name on (column_name)
唯一索引
關鍵字:unique index;
與普通索引類似,不同的就是:索引列的值必須唯一,但允許有空值(注意和主鍵不同)。如果是組合索引,則列值的組合必須唯一,建立方法和普通索引類似
----------------------index-----------------------------
create
unique index index_name on table_name(column_name)
alter
table table_name add
unique index_name on (column_name)
----------------------create-----------------------
create
table
`table_name` (
`id`
int(11) not
null auto_increment ,
`title`
char(255) not
null ,
primary
key (`id`),
unique index_name (title)
);
主鍵索引
關鍵字:primary key
必須為主鍵建立的唯一索引。、
primary key (`id`),
全文索引
關鍵字:fulltext
作用於char、varchar或text,如果資料量大,建立索引耗時很嚴重。
-------------------fulltext-------------------------------
alter
table table_name add fulltext index_name(column_name)
create fulltext index index_name on table_name (column_name)
關鍵字:index
建立多個欄位的一起查詢的索引。建立索引遵從最左字首原理,就是從最左邊開始組合。
alter
table article add index index_mul(first(20),second(20))
實際上的索引是:
first
first,second
最左字首原理
索引經驗值
動作描述
聚集索引
非聚集索引
列經常被分組排序
使用使用
返回某範圍內的資料
使用不使用
乙個或極少不同值
不使用不使用
小數目的不同值
使用不使用
大數目的不同值
不使用使用
頻繁更新的列
不使用使用
外來鍵列使用
使用列經常被分組排序
使用使用
主鍵列不使用使用
最好不要有null值
只要列中包含有null值都將不會被包含在索引中。復合索引中只要有一列含有null值,那麼這一列對於此復合索引就是無效的。
短索引
對串列進行索引,如果可能應該指定乙個字首長度。例如,如果有乙個char(255)的列,如果在前10個或20個字元內,多數值是惟一的,那麼就不要對整個列進行索引。短索引不僅可以提高查詢速度而且可以節省磁碟空間和i/o操作。
索引排序
mysql只會使用一次索引,where使用了索引的話,order by就不會使用索引。
不要再字段上進行運算
在字段上運算會導致索引失效。
like 語句操作
like %xx%會使索引失效,因為最左字首原因。like xx%則不會失效。
索引生效的操作
<,<=,=,>,>=,between,in,以及某些時候的like(不以萬用字元%或_開頭的情形)
資料庫中,使用explan命令就可以檢視詳細的sql語句的執行詳情,稱為執行計畫
舉例:
explain select * from *** where ***=***
返回的結果如下(只做簡介)
id:查詢的序列號,越大表明越先執行。
select_type:查詢的型別,主要區別普通查詢和聯合查詢等:
table:輸出的行所引用的表,尖括號括起來表明是臨時表。
type:查詢的型別,表明是否使用了索引,和使用了什麼索引。
possible_key:查詢時可能使用到的索引。
key:查詢時真正使用的索引。
key_len:使用索引的長度,所有使用到的索引的總長度
ref:常數等值查詢,這裡會顯示const,如果是連線查詢,被驅動表的執行計畫這裡會顯示驅動表的關聯字段
rows:估算的掃瞄行數。
extra:擴充套件字段,可顯示的資訊非常多。
可參考的資料:
巨杉資料庫執行計畫和索引的使用
執行計畫 巨杉資料庫的執行計畫通過explain獲取,分成兩種,一種是未執行獲取的執行計畫,一種是已執行後獲取的執行計畫。兩種方式獲取的執行計畫詳情有所不同。索引 在巨杉早期的版本中,先建立的索引會被優先使用,這是不合理的,後面的版本不知道有沒有進行優化。可以通過hint進行指定使用哪個索引。執行計...
資料庫 資料庫索引
索引是儲存引擎用於快速找到記錄的一種資料結構。索引以檔案的形式儲存在磁碟中。索引可以包含乙個或多個列的值。儲存引擎查詢資料的時候,先在索引中找對應值,然後根據匹配的索引記錄找到對應的資料行。1.b tree索引 2.雜湊索引 myisam和innodb儲存引擎 只支援btree索引,也就是說預設使用...
資料庫mysql索引 資料庫 mysql索引
mysql 索引 mysql索引的建立對於mysql的高效執行是很重要的,索引可以大大提高mysql的檢索速度。打個比方,如果合理的設計且使用索引的mysql是一輛蘭博基尼的話,那麼沒有設計和使用索引的mysql就是乙個人力三輪車。索引分單列索引和組合索引。單列索引,即乙個索引只包含單個列,乙個表可...