zoukankan      html  css  js  c++  java
  • 你了解索引吗?

    1. 什么是索引?

      1)MySQL官方对索引的定义:索引(Index)是帮助MySQL高效获取数据的数据结构;
      2)索引的本质:索引是数据结构,可以理解为排好序的快速查找数据结构,一般来说索引本身也很大,不可能全部存储于内存中,因此索引往往以索引文件的形式存储于磁盘文件上。

    2. 索引的优势

      1)类似于大学图书馆建书目索引,提高数据检索的效率,降低数据库的IO成本;

      2)通过索引列对数据进行排序,降低数据排序的成本,降低了CPU的消耗;

    3. 索引的劣势

      1)虽然索引大大提高了查询速度,同时却会降低更新表的速度,如对表进行INSERT、UPDATE和DELETE;

      2)因为更新表时,MySQL不仅要保存数据,还要保存一下索引文件每次更新添加的索引列的字段,都会调整因为更新所带来的键值变化后的索引信息;

      3)实际上索引也是一张表,该表保存了主键与索引字段,并指向实体表的记录,所以索引列也是要占用空间的;

    4. 哪些情况下适合建立索引?

      1)主键自动建立唯一索引;

      2)频繁作为查询条件的字段应该创建索引;

      3)查询中与其他表关联的字段,外键关系建立索引;

      4)单键/组合索引的选择问题,组合索引性价比更高;

      5)查询中排序的字段,排序字段若通过索引去访问将大大提高排序速度;

      6)查询中统计或者分组字段;

    5. 哪些情况下不适合建立索引?

      1)表字段太少(一般建议在表中数据有2000行时,建立索引);

      2)经常增删改的表或者字段;

      3)Where条件里用不到的字段不创建索引;

      4)过滤性不好的不适合建立索引(过滤性不好即为区分度太差的字段,比如:性别)

    6. 索引的分类

      1)最常见的索引类型;确保数据记录的唯一性;确定特定数据记录在数据库中的位置,不允许有null值

      2)唯一索引(UNIQUE)

              避免同一个表中某数据列中的值重复;主键索引只能有一个,唯一索引可以有多个;
              索引列的值必须唯一,且允许有null值;

      3)组合索引(多个列联合索引)

              组合索引遵循最左前缀的标准,专门用于组合搜索,其效率大于索引合并;

      4)常规索引(INDEX)

             快速定位特定数据;常加在查询条件的字段,不易添加太多的常规索引,影响数据的插入、更新和删除操作;

      5)全文索引(FULLTEXT)

             快速定位特定数据,只能用于MyISAM存储引擎的数据表,只能用于CHAR、VARCHAR、TEXT数据列类型,常使用大型数据集;

      6)创建、删除索引

             CREATE UNIQUE INDEX indexName ON mytable(username(length);            // 直接创建索引
       ALTER table mytable ADD UNIQUE indexName (username(length));        // 修改表结构
       ALTER table tableName ADD INDEX indexName(columnName);         // 修改表结构
       DROP INDEX [indexName] ON mytable;                     // 删除索引
       SHOW INDEXES FROM mytable;                                                          // 展示表的索引集合
  • 相关阅读:
    initctl 创建自己的JOB
    TortoiseXX 与TotalCommander (TC)的图标问题
    eclipse 与 tomcat 的那些路径
    把函数视为对象
    序列增量赋值的一个谜题: +=
    __new__ 和 __init__ 的区别
    Python 中 is 与 == 区别
    Flask 2.0.1 changes
    flask run 与 DispatcherMiddleware 不兼容处理
    waitress 部署 flask服务
  • 原文地址:https://www.cnblogs.com/blogtech/p/12218082.html
Copyright © 2011-2022 走看看