码迷,mamicode.com
首页 > 数据库 > 详细

MySQl 索引

时间:2015-03-06 17:32:31      阅读:198      评论:0      收藏:0      [点我收藏+]

标签:

??索引:

??    索引是提高数据库性能的重要方式。 MySQL中,所有的数据类型都可以被索引。

MySQL的索引包括:普通索引,唯一性索引,全文索引,单列索引,多列索引和空间索引等。

??索引的含义及特点:??

        索引是创建在表上的,是对数据库表中一列或多列的值进行排序的一种结构。索引可以提高查询的速度。

不同的存储引擎定义了每个表的最大索引数和最大索引长度。所有存储引擎对每个表至少支持16个索引,总索引长度至少为256字节。

索引的优缺点:

索引的优点是可以提高检索数据的速度,这是创建索引的主要原因:对于依赖关系的子表和父表之间的联合查询时,可以提高查询速度;使用分组和排序子句进行数据查询时,同样可以显著节省查询中分组和排序的时间。

索引的缺点是创建和维护索引需要耗费时间,耗费时间的数量随着数据的增加而增加;索引需要占用物理空间,每一个索引要占一定的物理空间;增加,删除和修改数据时,要动态的维护索引,造成数据的维护速度降低了。

技巧:

         索引可以提高查询的速度,但是会影响插入记录的速度。因为,向有索引的表中插入记录时,数据库系统会按照索引进行排序。这样就降低了插入记录的速度,插入大量记录时的速度影响更加明显。这种情况下,最好的办法是先删除表中的索引,然后插入数据。插入完成后,再创建索引。

索引的设计原则:

  1. 选择唯一性索引

    唯一索引的值是唯一的,可以更快速的通过该索引来确定某天记录。

  1. 为经常需要排序,分组的联合操作的字段建立索引

    经常需要ORDER BY, GROUP BY, DISTINCTUNION等操作的字段,排序操作会浪费很多时间。

  1. 为常作为查询条件的字段建立索引

  2. 限制索引的数目

  3. 尽量使用数据量少的索引

  4. 尽量使用前缀来索引

  5. 删除不再使用或者很少使用的索引

注意: 选择索引的最终目的是为了使查询的速度变快。上面给出的原则是最基本的准则,但不能拘泥于上面的原则。根据应用的实际情况进行分析和判断,选择最适合的索引方式。

创建索引:

创建表的时候创建索引:

         在创建表时可以直接创建索引,这种方式最简单,方便。其基本形式如下:

CREATE TABLE 表名( 属性名 数据类型[完整性约束条件],
                  属性名 数据类型[完整性约束条件],
                    ……
                  属性名 数据类型[完整性约束条件],
                  [UNIQUE|FULLTEXT|SPATIAL]  INDEX|KEY
                      [别名] (属性名1 [(长度)] [ASC|DESC])
);

其中,  UNIQUE 是可选参数,表示索引为唯一性索引;

          FULLTEXT是可选参数,表示索引为全文索引;

          SPATIAL 是可选参数,表示索引为空间索引;

          INDEX|KEY 参数用来指定字段为索引的,两者选择其中之一就可以了,作用是一样的;

     “别名”是可选参数,用来给创建的索引取的新名称;

      “属性1”参数指定索引对应的字段的名称,该字段必须为前面定义好的字段;

     “长度”是可选参数,其指索引的长度,必须是字符串类型才可以使用;

        “ASC””DESC”都是可选参数, “ASC”参数表示升序排列,”DESC”参数表示降序排列。


在已经存在的表上创建索引:

  在已经存在的表上创建索引,可以直接为表上的一个或几个字段创建索引。基本形式如下:

CREATE  [UNIQUE|FULLTEXT|SPATIAL]  INDEX  索引名
                            ON 表名( 属性名 [(长度)]  [ASC|DESC] );

   其中, UNIQUE是可选参数,表示索引为唯一性索引;

              FULLTEXT是可选参数,表示索引为全文索引;

              SPATIAL 是可选参数,表示索引为空间索引;

               INDEX 参数用来指字段为索引的;

             “索引名参数是给创建的索引取的新名称;

            “表名参数是指需要创建索引的表的名称,该表必须是已经存在的,如果不存在,需要先创建。

             “属性名参数指定索引对应的字段的名称,该字段必须为前面定义好的字段;

            “长度是可选参数,其指索引的长度,必须是字符串才可以使用;

              “ASC””DESC”都是可选参数,ASC参数表示升序排列, DESC参数表示降序排序。


ALTER TABLE语句来创建索引:

  在已经存在的表上,可以通过ALTER TABLE语句直接为表上的一个或几个字段创建索引。基本形式如下:

ALTER TABLE 表名 ADD [UNIQUE|FULLTEXT|SPATIAL] INDEX
                   索引名(属性名 [(长度)] [ASC|DESC]);


删除索引:

  删除索引是指将索引表中已经存在的索引删除掉。一些不再使用的索引会降低表的更新速度,影响数据库的性能。对于这样的索引,应该将其删除。

对应已经存在的索引,可以通过DROP语句来删除索引。基本形式如下:

DROP INDEX 索引名 ON 表名;

其中,“索引名”参数指要删除的索引的名称;

          “表名”参数指索引所在的表的名称;

收集文章:

    http://my.oschina.net/u/232270/blog/118001





MySQl 索引

标签:

原文地址:http://my.oschina.net/lvhuizhenblog/blog/383479

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!