你了解索引吗?

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;                                                          // 展示表的索引集合
posted @ 2020-01-20 15:08  菜鸟的奋斗之路  阅读(457)  评论(0编辑  收藏  举报