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

数据库的索引

时间:2015-06-16 22:50:15      阅读:259      评论:0      收藏:0      [点我收藏+]

标签:

  例如我们现在有表employee

  mysql> CREAT TABLE employee(eid INT PRIMARY KEY,

                                      fname VARCHAR(20),

                                      lname VARCHAR(20),

                                      fname_pinyin(40),

                                      lname_pinyin(40),

                                      depart VARCHAR(40),

                                      birth  DATE,

                                      sex  CHAR(1));

  • 未建索引时,当你select时,会进行全表扫描(全件检索)效率很低,创建索引和删除索引,查看本表所有索引的语句如下:

       mysql> CREAT INDEX index_name on tablename(columnname);

   mysql> DROP  index_name;

      mysql> SHOW INDEX;

  • 索引分为clustered indexnon-clustered index   

  一个表仅能有一个clustered index ,在mysql下一般默认会将primary key 设置为clustered index

     如果不想让primary key 成为clustered index 则可以在建表的时候对主键列的描述改为: eid INT PRIMARY KEY NONCLUSTERED

  • 在多个列上一起建的索引为复合索引 

  mysql> CREAT INDEX idx_fuhe on employee(lname_pinyin,fname_pinyin);

  • 在创建索引时加了UNIQUE就是唯一性索引。

  mysql> CREAT UNIQUE INDEX idx_uni on employee(fname_pinyin)

  对索引的唯一性限制就是对该列数据的唯一性限制,当再有新的数据插入,此新数据的该字段和表中已有记录的该字段相同,则插入操作会报错。

  当表中已有重复的数据,则创建唯一性索引会失败

      复合索引也可是唯一性索引,此时只需这几个字段的组合不出现重复项即可

  • 可以使用EXPLAIN 来看看SELECT语句使用索引的情况,尤其注意输出结果中rows的变化,以便来检查所建索引是否合适

   mysql> EXPLAIN SELECT * FROM employee WHERE lname=“wy”

 

数据库的索引

标签:

原文地址:http://www.cnblogs.com/ivywenyuan/p/4581839.html

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