索引從本質上來說也是一種表,這樣的表儲存被列為索引的列項值和指向真正完整記錄的指標。索引對使用者透明。僅僅被資料庫引擎用來加速檢索真實記錄。有索引的表。insert和update操作會耗費很多其它時間而select則會變快。由於insert和update操作同一時候也要insert和update索引值。但這些操作對使用者也透明。
索引通常運用在where、join、order by語句中[1]。
在mysql中,index和key是同義詞,兩者能夠互換[2]。一張表最多能有16個索引。每乙個索引最多由15個列組成。mysql中有4種型別索引。索引根據表型別(也既是儲存引擎)有不同儲存方式[3]。
儲存引擎
可能的索引型別
myisam
btree
innodb
btree
memory/heap
hash,btree
ndbbtree,hash
索引能夠在建立表的時候建立:
create table table_name (create_column_definition [, ...] );
當中 create_column_definition 能夠替換成:
比如:
create
table test(
`id`
int unsigned not
null auto_increment,
`data0`
varchar(20),
`data1`
varchar(20),
primary
key (`id`),
);
create
table test(
id int unsigned not
null auto_increment primary
key,
`data0`
varchar(20),
`data1`
varchar(20)
);
表建立之後也能夠加入索引:
1)使用alter命令:
alter table table_name
[alter_specification [, alter_specification] ... ];
當中 alter_sepcification 能夠替換成隨意一種:
當中 index_cloumn_name 能夠替換成:column_name [(length) [asc|desc]]
當中 index_type 能夠替換成:using
比如:
alter
table test add
unique
key`index_data0` (`data0` (10));
2)使用create命令:
create [unique|fulltext|spatial] index index_name
on table_name (index_cloumn_name, ... ) [index_type];
當中 index_cloumn_name 能夠替換成:column_name [(length) [asc|desc]]
當中 index_type 能夠替換成:using
須要注意的幾點:
比如:
create index `index_data1`
on test (`data1` (10));
刪除索引:
alter
table table_name drop
primary
key;
alter
table table_name drop index_name;
當建立多列索引之後,查詢所有索引或索引的前n列(與定義索引順序一致),能夠使用該索引[6]。比如:
create
table test(
id int
notnull auto_increment,
last_name char(30) not
null,
first_name char(30) not
null,
primary
key (id),
index name (last_name, first_name)
);
下面這些查詢能用到索引 name:
select * from test where
last='xyb';
select * from test where
last='xyb'
and first_name='love';
select * from test where
last='xyb'
and (first_name='love'
or first_name='charlotte');
select * from test where
last='xyb'
and first_name >= 'l'
and first_name <= 'n';
下面這些chauncey不能用到索引 name:
select * from test where first_name='charlotte';
select * from test where
last='xyb'
or first_name='charlotte';
綜合解說索引能夠參見鏈結[7]
[2][3]
[4][5]
[6][7]
Mysql之索引的簡單介紹
幾乎所有的索引都是建立在字段之上 索引 系統根據某種演算法,將已有的資料 未來可能新增的資料 單獨建立乙個檔案 檔案能夠實現快速的匹配資料,並且能夠快速的找到對應表中的記錄 索引的意義 1.提公升查詢資料的效率 2.約束資料的有效性 唯一性等 增加索引的前提條件,索引本身就會產生索引檔案 有時候有可...
索引簡單介紹
今天面試時被問到索引的原理,之前在學習資料庫的時候,研究了一下,但是不經常使用,或者說使用建立索引的時候也就是幾句命令,所以對原理性的東西並沒有掌握。因此用一篇簡短的文章來簡單回顧一下索引的基本知識,等抽空研究原理。首先說說什麼是索引,類似與書的目錄。概念 1.索引是對資料庫表中一列或多列的值進行排...
mysql簡單索引 mysql簡單索引
mysql的索引是在儲存引擎實現的,而不是在伺服器層,因此不是標準的。b tree 大部分的mysql支援b tree索引,archive知道mysql5.1才支援,而且僅僅是支援單個auto increment列 ndb儘管把索引標記我俄哦btree,但內部使用的是t tree。myisam使用壓...