Mysql_01索引

一、介绍

索引(Index) 可帮助Mysql高效获取数据的数据结构。索引的本质:索引是数据结构。
索引可用于查询与排序。
一般来说索引会很大,不可能全部存储在内存中,因此索引一般以文件的形式存储在磁盘上。

1.1 索引的优势:

  • 提高数据的检索效率,降低数据库的IO成本;
  • 对数据进行排序,降低数据排序的成本,降低CPU的消耗。

1.2 索引的劣势:

  • 索引也是一张表,该表保存了主键与索引字段,并指向实体表的记录,所以索引列也是要占用空间的;
  • 虽然索引大大提高了查询速度,同也却会降低更新表的速度,如对于进行INSERT/UPDATE/DELETE,因为在更新表时,MYSQL不仅要保存数据,还要保存索引文件,每次更新添加了索引表的字段,都会调整更新所带来的键值变化后的索引信息;
  • 索引只是提高效率的一个因素,如果你的Mysql数据库有大数据量的表,就需要花时间研究建立最优秀的索引,或优化查询语句。

1.3 索引的分类:

  • 单值索引:
    一个索引只有一个列,一个表可以有多个单列索引
  • 唯一索引:
    索引列的值必须唯一,可以有空值。
  • 复合索引:
    一个索引有多个列组成

1.4 索引语法:

创建索引:

  • CREATE [UNIQUE] INDEX indexName ON tableName(columnName(length));

  • ALTER TABLE tableName ADD INDEX indexName(columnName);

删除索引:

  • DROP INDEX [indexName] ON tableName;

1.5 MYSQL索引结构:

  • BTree:

  • Hash:

  • full-text:

  • R-Tree:

1.6 哪些情况可以创建索引?

  • 主键自动建立唯一索引;
  • 频繁作为查询条件的字段应该创建索引;
  • 查询表中与其它表的关联字段,外键关系可以创建索引;
  • 频繁更新的字段不适合创建索引;
  • where条件里用不到的字段不创建索引;
  • 单健/组合索引的选择问题
  • 查询中排序的字段,排序字段若通过索引去访问将大大提高查询速度;
  • 查询中统计或分组字段。

1.7 哪些情况不需要创建索引?

  • 表记录太少;
  • 经常增删改的表字段;
  • 数据重复且分布平均的表字段,如性别列只有 男/女, 在此列上创建索引优化效果不大。

1.8 Mysql常见瓶颈:

  • CPU:
    CPU在饱和时一般发生在数据装入内存或从磁盘上读取数据时候
  • IO:
    磁盘I/O 瓶颈

你可能感兴趣的:(Mysql,mysql)