数据库的索引

  例如我们现在有表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”

 

posted @ 2015-06-16 21:59  ivywenyuan  阅读(194)  评论(0编辑  收藏  举报