zoukankan      html  css  js  c++  java
  • 数据库的索引

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

  • 相关阅读:
    从亚马逊、微软、谷歌的云之争,看国内云计算的未来
    即使是菜鸟,也能配置出一个网站
    为什么软件开发周期通常是预期的两三倍?
    2015-2016前端知识体系
    UOJ269【清华集训2016】如何优雅地求和【数论,多项式】
    LOJ166 拉格朗日插值 2【卷积,NTT】
    CF1140F Extending Set of Points 【按时间分治,并查集】
    CF1168C And Reachability 【构造,dp】
    CF1182F Maximum Sine【类欧,扩欧】
    牛客 可见山峰对数量(进阶)
  • 原文地址:https://www.cnblogs.com/ivywenyuan/p/4581839.html
Copyright © 2011-2022 走看看