mysql索引簡單介紹

2022-10-11 11:42:12 字數 2922 閱讀 1102

索引從本質上來說也是一種表,這樣的表儲存被列為索引的列項值和指向真正完整記錄的指標。索引對使用者透明。僅僅被資料庫引擎用來加速檢索真實記錄。有索引的表。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使用壓...