• MySQL 索引简介



    1|0索引的含义和特点

    索引是创建在表上的,是对数据库表中一列或多列的值进行排序的一种结构,可以提高查询速度。使用索引类似于使用新华字典的音序表,通过提取拼音,可以快速定位该数据的位置

    索引有其明显的优势,也有不可避免的缺点:

    • 创建和维护索引同样需要耗费时间,并随着数据量的增加而增加
    • 索引也会占用一定的物理空间
    • 增加、删除和修改数据时,要动态地维护索引

    2|0索引的分类和操作

    1|01. 普通索引

    所谓普通索引,就是在创建索引时,不附加任何限制条件(唯一、非空等限制),可以创建在任何数据类型的字段上

    创建表时直接创建索引

    CREATE TABLE tablename(  
    	propname1 type1 [CONSTRAINT1],
        propname2 type2 [CONSTRAINT2],
        ......
    	INDEX|KEY [indexName] (propname1 [(length) [ASC|DESC]])  
    );  
    

    在已存在的表上通过 CREATE 语句创建索引

    CREATE INDEX indexName ON tablename (propname [(length) [ASC|DESC]])
    

    通过 ALTER TABLE 语句创建

    ALTER table tablename ADD INDEX|KEY indexName(propname [(length) [ASC|DESC]])
    

    1|02. 唯一索引

    所谓唯一索引,就是在创建索引时,限制索引的值必须唯一,主键就是一种特殊的唯一索引

    创建表时直接创建索引

    CREATE TABLE tablename(  
    	propname1 type1 [CONSTRAINT1],
        propname2 type2 [CONSTRAINT2],
        ......
    	UNIQUE INDEX|KEY [indexName] (propname1 [(length) [ASC|DESC]])  
    );  
    

    在已存在的表上通过 CREATE 语句创建索引

    CREATE UNIQUE INDEX indexName ON tablename (propname [(length) [ASC|DESC]])
    

    通过 ALTER TABLE 语句创建

    ALTER table tablename ADD UNIQUE INDEX|KEY indexName(propname [(length) [ASC|DESC]])
    

    1|03. 全文索引

    全文索引主要关联在 CHAR、VARCHAR 和 TEXT 字段上,以便能更加快速地查询数据量较大的字符串类型字段

    创建表时直接创建索引

    CREATE TABLE tablename(  
    	propname1 type1 [CONSTRAINT1],
        propname2 type2 [CONSTRAINT2],
        ......
    	FULLTEXT INDEX|KEY [indexName] (propname1 [(length) [ASC|DESC]])  
    );  
    

    在已存在的表上通过 CREATE 语句创建索引

    CREATE FULLTEXT INDEX indexName ON tablename (propname [(length) [ASC|DESC]])
    

    通过 ALTER TABLE 语句创建

    ALTER table tablename ADD FULLTEXT INDEX|KEY indexName(propname [(length) [ASC|DESC]])
    

    1|04. 多列索引

    所谓多列索引,是指在创建索引时关联多个字段。虽然可以通过所关联的字段进行查询,但是只有查询条件中使用了所关联字段中的第一个字段,多列索引才会被使用

    创建表时直接创建索引

    CREATE TABLE tablename(  
    	propname1 type1 [CONSTRAINT1],
        propname2 type2 [CONSTRAINT2],
        ......
    	INDEX|KEY [indexName] (propname1 [(length) [ASC|DESC]],
                               propname2 [(length) [ASC|DESC]],
                               ......);
    );  
    

    在已存在的表上通过 CREATE 语句创建索引

    CREATE INDEX indexName ON tablename (propname1 [(length) [ASC|DESC]],
                                         propname2 [(length) [ASC|DESC]],
                                         ......);
    

    通过 ALTER TABLE 语句创建

    ALTER table tablename ADD INDEX|KEY indexName(propname1 [(length) [ASC|DESC]],
    											  propname2 [(length) [ASC|DESC]],
    											  ......);
    

    1|05. 删除索引

    DROP INDEX indexName ON tablename;
    

    3|0索引的设计原则

    1. 选择唯一性索引,可以更快速地确定某条记录
    2. 为经常需要排序、分组和联合操作的字段建立索引
    3. 为经常需要作为查询条件的字段建立索引
    4. 限制索引的数目,索引越多,占用的空间就越多,修改表时对索引的重构和更新也很麻烦
    5. 尽量使用数据量少的索引,索引的值越长,查询速度也会受影响
    6. 尽量使用前缀来索引,对于 TEXT 和 BLOB 类型的字段,进行全文索引会很浪费时间,如果只检索字段前面的若干字段,可以提高速度
    7. 删除不再使用或很少使用的索引


    __EOF__

    本文作者YeeQan
    本文链接https://www.cnblogs.com/Yee-Q/p/16153187.html
    关于博主:评论和私信会在第一时间回复。或者直接私信我。
    版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
    声援博主:如果您觉得文章对您有帮助,可以点击文章右下角推荐一下。您的鼓励是博主的最大动力!
  • 相关阅读:
    Java Reflection中如何访问私有变量和私有方法呢?
    Golang设计模式
    python读取amazon s3上的文件到内存
    Python实战:爬取小红书
    数据清洗与规范化详解
    Unity的碰撞检测(三)
    项目开发的详细步骤(精华版)
    Windows+Pycharm 如何创建虚拟环境
    软考高级信息系统项目管理师系列之:信息系统项目管理师历年论文真题汇总
    POJ1251丛林之路题解
  • 原文地址:https://www.cnblogs.com/Yee-Q/p/16153187.html