• Mysql创建数据库索引


    一、数据库索引

            1、为表创建索引的目的是为了加快查询过程,从而更快的响应请求。
            2、而创建索引时,实际上会增加表所占的存储空间,是一直以空间换时间的理念。
            3、Mysql中,若使用InnoDB作为存储引擎,那么默认的索引存储方式就是B+树。
            4、因为创建索引的目的是为了加快查询过程,若有大量的更新和插入过程,可先去除索引,因为索引在插入或更新记录的时候也会动态的更新,这将增加插入和更新数据的执行时间。

    二、建表时创建索引

    1. -- 主键索引
    2. CREATE TABLE table_name(
    3. param type PRIMARY KEY AUTO_INCREMENT,
    4. ...
    5. );
    6. -- 唯一索引
    7. CREATE TABLE table_name(
    8. param type UNIQUE,
    9. ...
    10. );
    11. -- 外键索引
    12. CREATE TABLE table_name(
    13. param type,
    14. ...,
    15. CONSTRANT foreing_key_name FOREING KEY (param) REFERENCES table_name(key);
    16. );
    17. -- 一般索引, 只有Mysql 8.0以上版本支持索引升降序排列
    18. CREATE TABLE table_name(
    19. param type,
    20. ...,
    21. INDEX[KEY] index_name param ASC[DESC]
    22. );

    三、建表后添加索引

    1. -- 方式一
    2. ALTER TABLE table_name ADD INDEX[KEY] index_name(param);
    3. -- 方式二
    4. CREATE INDEX index_name ON table_name(param);

    四、删除索引

    1. -- 方式一
    2. ALTER TABLE table_name DROP INDEX[KEY] index_name;
    3. -- 方式二
    4. DROP INDEX index_name ON table_name;
    5. -- 注意!!! 有**AUTO_INCREMENT** 定义的索引无法删除

    五、隐藏索引

    与删除索引不同,隐藏索引的目的是为了让索引在查询是失效,但不从存储空间中真实的删除。
    直接在定义索引的最后添加 VISIBLE 或 INVISIBLE 关键字即可,一般使用在修改的过程。

    ALTER TABLE table_name ALTER INDEX[KEY] INVISIBLE[VISIBLE];
    

    六、备注及说明

            6.1、适合创建索引的多种情况:

                    1、字段的属性值存在唯一性约束
                    2、条件查询中经常出现的字段
                    3、经常GROUP BY 和 ORDER BY的字段
                    4、UPDATE和DELETE的条件字段
                    5、DISTINCT字段
                    6、多表查询时的连接字段(类型需要一致)
                    7、相同情况下,使用列类型较小的字段(节省存储空间)
                    8、使用字符串前缀(节省空间,但需要分析确认前缀长度)
                    9、区分度高的字段,既记录的数量与字段值的数量相近
                    10、使用最频繁的字段放在索引的最左侧,与B+树结构有关
                    11、多字段的联合索引要优于多字段的单索引

            6.2、不适合创建索引的多种情况:

                    1、条件查询中不使用的字段
                    2、数据量小的表中不需要创建索引
                    3、字段的值存在大量重复(与上述的情况9相反)
                    4、经常更新的字段不需要创建索引(增加系统开销)
                    5、无序字段不需要创建索引
                    6、经常使用的索引建议删除
                    7、冗余和重复的索引

  • 相关阅读:
    JUC并发包下
    自动拉取和推送docker镜像到私有仓库(skopeo)
    Dialog的IDE搭建systermView的方法步骤(DA1469X)
    基于C++的车辆装甲板检测自瞄系统
    服务器遭受攻击之后的常见思路
    linux环境下查看程序为什么被kill
    Linux离线调试之 coredump功能开启并生成
    优化yarn在任务执行时核数把控不准确的问题
    字符设备驱动
    Element-Ui el-table 动态添加行
  • 原文地址:https://blog.csdn.net/qq_35797735/article/details/125596468