索引

什么是索引?

索引其实是一种数据结构,能够帮助我们快速的检索数据库中的数据

索引的优缺点?

  • 优点
    1. 提高数据检索的效率,降低数据库IO成本。
    2. 通过索引对数据进行排序,降低数据的排序成本,降低CPU的消耗。
  • 缺点
    1. 建立索引需要占用物理空间
    2. 会降低表的增删改的效率,因为每次对表记录进行增删改,需要进行动态维护索引,导致增删改时间变长

什么情况下需要建索引?

  1. 主键自动创建唯一索引
  2. 较频繁的作为查询条件的字段
  3. 查询中排序的字段,查询中统计或者分组的字段

什么情况下不需要建索引?

  1. 表记录太少的字段
  2. 经常增删改的字段
  3. 唯一性太差的字段,不适合单独创建索引。比如性别,民族,政治面貌

索引有哪几种分类?

MySQL主要的几种索引类型:1.普通索引 2.唯一索引 3.主键索引 4.组合索引 5.全文索引。

  • 普通索引: 是最基本的索引,它没有任何限制
  • 唯一索引: 索引列的值必须唯一,但允许有空值。如果是组合索引,则列值的组合必须唯一
  • 主键索引: 是一种特殊的唯一索引,一个表只能有一个主键,不允许有空值。
  • 联合索引: 一个索引包含多个列,实际开发中推荐使用组合索引。
  • 全文索引: 全文搜索的索引。FULLTEXT 用于搜索很长一篇文章的时候,效果最好。只能用于InnoDB或MyISAM表,只能为CHAR、VARCHAR、TEXT列创建。
  • 聚簇索引: 将数据存储与索引放到了一块,找到索引也就找到了数据
  • 非聚簇索引: 将数据存储于索引分开结构,索引结构的叶子节点指向了数据的对应行,myisam通过key_buffer把索引先缓存到内存中,当需要访问数据时(通过索引访问数据),在内存中直接搜索索引,然后通过索引找到磁盘相应数据,这也就是为什么索引不在key buffer命中时,速度慢的原因
  • 覆盖索引: 覆盖索引是select的数据列只用从索引中就能够取得,不必读取数据行,换句话说查询列要被所建的索引覆盖

索引的数据结构有哪些?

Hash索引和B+树索引的区别?

为什么B+树比B树更适合实现数据库索引?

聚集索引相对于非聚集索引的区别?

什么是回表查询?

什么是覆盖索引?

什么是最左匹配原则?

索引失效场景有哪些?

  • 组合索引未使用最左前缀,例如组合索引(age,name),where name=’张三’不会使用索引;
  • or会使索引失效。如果查询字段相同,也可以使用索引。例如where age=20 or age=30(索引生效),where age=20 or name=‘张三’(这里就算你age和name都单独建索引,还是一样失效);
  • 如果列类型是字符串,不使用引号。例如where name=张三(索引失效),改成where name=‘张三’(索引有效);
  • like未使用最左前缀,where A like ‘%China’;
  • 在索引列上做任何操作计算、函数,会导致索引失效而转向全表扫描;
  • 如果mysql估计使用全表扫描要比使用索引快,则不使用索引;

索引的设计原则?

文章目录
  1. 1. 什么是索引?
  2. 2. 索引的优缺点?
  3. 3. 什么情况下需要建索引?
  4. 4. 什么情况下不需要建索引?
  5. 5. 索引有哪几种分类?
  6. 6. 索引的数据结构有哪些?
  7. 7. Hash索引和B+树索引的区别?
  8. 8. 为什么B+树比B树更适合实现数据库索引?
  9. 9. 聚集索引相对于非聚集索引的区别?
  10. 10. 什么是回表查询?
  11. 11. 什么是覆盖索引?
  12. 12. 什么是最左匹配原则?
  13. 13. 索引失效场景有哪些?
  14. 14. 索引的设计原则?
|