当前位置:首页 > Mysql教程 > 列表

mysql如何创建索引?mysql创建索引

发布:smiling 来源: PHP粉丝网  添加日期:2014-09-29 10:12:14 浏览: 评论:0 

mysql 如何创建索引呢,这个其实很简单 create index或者为己有字段增加索引 ALTER TABLE `table_name` ADD UNIQUE (`column`)即可了.

mysql索引作用

在索引列上,除了有序查找之外,数据库利用各种各样的快速定位技术,能够大大提高查询效率,特别是当数据量非常大,查询涉及多个表时,使用索引往往能使查询速度加快成千上万倍.

mysql索引创建规则:

1、表的主键、外键必须有索引;

2、数据量超过300的表应该有索引;

3、经常与其他表进行连接的表,在连接字段上应该建立索引

4、经常出现在Where子句中的字段,特别是大表的字段,应该建立索引;

5、索引应该建在选择性高的字段上;

6、索引应该建在小字段上,对于大的文本字段甚至超长字段,不要建索引;

7、复合索引的建立需要进行仔细分析;尽量考虑用单字段索引代替:

A、正确选择复合索引中的主列字段,一般是选择性较好的字段;

B、复合索引的几个字段是否经常同时以AND方式出现在Where子句中?单字段查询是否极少甚至没有?如果是,则可以建立复合索引;否则考虑单字段索引;

C、如果复合索引中包含的字段经常单独出现在Where子句中,则分解为多个单字段索引;

D、如果复合索引所包含的字段超过3个,那么仔细考虑其必要性,考虑减少复合的字段;

E、如果既有单字段索引,又有这几个字段上的复合索引,一般可以删除复合索引;

8、频繁进行数据操作的表,不要建立太多的索引;

9、删除无用的索引,避免对执行计划造成负面影响; 以上是一些普遍的建立索引时的判断依据。

一言以蔽之,索引的建立必须慎重,对每个索引的必要性都应该经过仔细分析,要有建立的依据。

因为太多的索引与不充分、不正确的索引对性能都毫无益处:在表上建立的每个索引都会增加存储开销,

索引对于插入、删除、更新操作也会增加处理上的开销。另外,过多的复合索引,在有单字段索引的情况下,

一般都是没有存在价值的;相反,还会降低数据增加删除时的性能,特别是对频繁更新的表来说,负面影响更大。

2.创建索引

在执行CREATE TABLE语句时可以创建索引,也可以单独用CREATE INDEX或ALTER TABLE来为表增加索引。

1.ALTER TABLE

ALTER TABLE用来创建普通索引、UNIQUE索引或PRIMARY KEY索引,代码如下:

  1. ALTER TABLE table_name ADD INDEX index_name (column_list) 
  2.  
  3. ALTER TABLE table_name ADD UNIQUE (column_list) 
  4.  
  5. ALTER TABLE table_name ADD PRIMARY KEY (column_list) 

其中table_name是要增加索引的表名,column_list指出对哪些列进行索引,多列时各列之间用逗号分隔。索引名index_name可选,缺省时,MySQL将根据第一个索引列赋一个名称。另外,ALTER TABLE允许在单个语句中更改多个表,因此可以在同时创建多个索引。

2.CREATE INDEX

CREATE INDEX可对表增加普通索引或UNIQUE索引,代码如下:

  1. CREATE INDEX index_name ON table_name (column_list) 
  2.  
  3. CREATE UNIQUE INDEX index_name ON table_name (column_list) 

table_name、index_name和column_list具有与ALTER TABLE语句中相同的含义,索引名不可选,另外,不能用CREATE INDEX语句创建PRIMARY KEY索引.

3.索引类型

在创建索引时,可以规定索引能否包含重复值。如果不包含,则索引应该创建为PRIMARY KEY或UNIQUE索引。对于单列惟一性索引,这保证单列不包含重复的值。对于多列惟一性索引,保证多个值的组合不重复。

PRIMARY KEY索引和UNIQUE索引非常类似。事实上,PRIMARY KEY索引仅是一个具有名称PRIMARY的UNIQUE索引。这表示一个表只能包含一个PRIMARY KEY,因为一个表中不可能具有两个同名的索引。

下面的SQL语句对students表在sid上添加PRIMARY KEY索引,代码如下:

ALTER TABLE students ADD PRIMARY KEY (sid)

4. 删除索引

可利用ALTER TABLE或DROP INDEX语句来删除索引,类似于CREATE INDEX语句,DROP INDEX可以在ALTER TABLE内部作为一条语句处理,语法如下:

  1. DROP INDEX index_name ON talbe_name 
  2.  
  3. ALTER TABLE table_name DROP INDEX index_name 
  4.  //phpfensi.com
  5. ALTER TABLE table_name DROP PRIMARY KEY 

其中,前两条语句是等价的,删除掉table_name中的索引index_name.

第3条语句只在删除PRIMARY KEY索引时使用,因为一个表只可能有一个PRIMARY KEY索引,因此不需要指定索引名。如果没有创建PRIMARY KEY索引,但表具有一个或多个UNIQUE索引,则MySQL将删除第一个UNIQUE索引。

如果从表中删除了某列,则索引会受到影响。对于多列组合的索引,如果删除其中的某列,则该列也会从索引中删除。如果删除组成索引的所有列,则整个索引将被删除。

5.查看索引,代码如下:

  1. mysql> show index from tblname; 
  2.  
  3. mysql> show keys from tblname; 

Table:表的名称。

Non_unique:如果索引不能包括重复词,则为0,如果可以,则为1.

Key_name:索引的名称.

Seq_in_index:索引中的列序列号,从1开始.

Column_name:列名称.

Collation:列以什么方式存储在索引中,在MySQL中,有值‘A’(升序)或NULL(无分类).

Cardinality:索引中唯一值的数目的估计值,通过运行ANALYZE TABLE或myisamchk -a可以更新,基数根据被存储为整数的统计数据来计数,所以即使对于小型表,该值也没有必要是精确的,基数越大,当进行联合时,MySQL使用该索引的机会就越大.

Sub_part:如果列只是被部分地编入索引,则为被编入索引的字符的数目,如果整列被编入索引,则为NULL.

Packed:指示关键字如何被压缩,如果没有被压缩,则为NULL.

Null:如果列含有NULL,则含有YES,如果没有,则该列含有NO.

Index_type:用过的索引方法(BTREE, FULLTEXT, HASH, RTREE)。

Comment:一些关于过引的常用语句

1.添加PRIMARY KEY(主键索引)

mysql>ALTER TABLE `table_name` ADD PRIMARY KEY ( `column` )

2.添加UNIQUE(唯一索引)

  1. mysql>ALTER TABLE `table_name` ADD UNIQUE ( 
  2. `column

3.添加INDEX(普通索引)

mysql>ALTER TABLE `table_name` ADD INDEX index_name ( `column` )

4.添加FULLTEXT(全文索引)

mysql>ALTER TABLE `table_name` ADD FULLTEXT ( `column`)

5.添加多列索引

mysql>ALTER TABLE `table_name` ADD INDEX index_name ( `column1`, `column2`, `column3` )

Tags: mysql如何创建索引

分享到: