mysql索引学习1

1. 索引概述

  1. 什么是索引

    索引是帮助数据库快速检索数据的一种数据结构。mysql中,存储引擎首先在索引中找到对应值,然后根据匹配的索引记录找到对应的数据行。索引可以包含一个或多个列,如果索引包含多个列(联合索引),那么列的顺序十分重要。


2. 索引类型

  1. 索引有多种类型,mysql中索引是在存储引擎层实现而不是服务器器层,所以不同的存储引擎的索引的工作方式并不一样,不是所有的存储引擎都支持所有类型的索引,即使多个存储引擎支持同一种索引,其底层实现也可能不同
  2. B-tree索引
    1. 不同的存储引擎有着不同的存储结构,如NDB集群存储引擎实际使用T-tree结构存储索引,而innodb则使用b+ tree。
    2. 适用查询类型
      1. 全值匹配
        • 匹配所有的索引列,如 select xx from yy where a = A and b = B and c = C,匹配联合索引(a,b,c)
      2. 匹配最左前缀
        • 联合索引的最左前缀匹配,如 select xx from yy where a = A ,匹配联合索引(a,b,c)
      3. 匹配列前缀
        • 字符串类型的列的前缀匹配(匹配字符串的前缀)
      4. 匹配范围值
        • 范围查询,如 select xx from yy where a > A1 and a < A2
      5. 精确匹配某一列并范围匹配另一列
        • 联合索引的最左前缀匹配,如 select xx from yy where a = A and b > B and c = C,匹配联合索引(a,b,c),只会用到(a,b)索引
      6. 只访问索引的查询(索引覆盖)
        • 查询访问的是索引列,直接进行索引覆盖,避免回表的操作
      7. 缺点
        1. 若不是按照索引列的顺序(最左前缀匹配),则无法使用索引
        2. 不能跳过索引中的列
        3. 如果查询中有某个列的范围查询,则该列之后的索引列无法使用
        4. insert和delete操作会引起B+ tree结果的分裂和合并操作,导致操作性能下降
    3. hash索引
      1. 适应场景:适合等值查询(hash表数据结构)
      2. 缺点:
        1. 无法满足联合索引的最左前缀匹配
        2. 无法进行索引覆盖
        3. 不适用于范围查询
        4. 不适用于数据的排序(hash的特点为让数据尽可能的分散)
        5. 当hash碰撞频繁时,数据的检索效率会下降

3. 索引的优点

  1. 索引一般能大大减少mysql服务器扫描的数据量
  2. 索引可以帮助服务器减少排序和临时表
  3. 索引可以将随机IO转化为顺序IO
  4. 索引是最好的性能解决方案吗?
    • 索引不总是最好的工具,只有当索引可以帮助存储引擎减少搜寻的数据量时带来的收益大于其带来的额外工作,索引才是有效的。

4. 创建高性能的索引

  1. 独立的列

    如果查询的列不是独立的,则mysql不会使用索引,独立的列指:不能是表达式的一部分或者函数的参数。

  2. 前缀索引与索引选择性

    当索引列为很长的字符串时,索引会变大且慢,此时可以使用hash索引,但有时并不能很好的解决问题,我们可以索引列的前一部分字符(即字符串前缀),这样减少了索引的占用空间,但是索引的选择性降低了,索引选择性为不重复的索引值和数据表的记录总数之比,选择性越高的索引,效率越高,因为可以过滤更多的数据行,如唯一索引(unique index)的选择性为1,性能最好。所以选择性最高索引应置为最左的列。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
学习MySQL中的视图和索引时,可以按照以下步骤进行: 1. 理解基本概念:首先,了解视图和索引的基本概念和作用。明确视图是用于简化查询操作和逻辑封装的虚拟表,索引是用于加速数据检索的数据结构。 2. 学习语法和语句:熟悉创建、修改和删除视图和索引的语法和语句。了解如何使用CREATE VIEW、ALTER VIEW、DROP VIEW、CREATE INDEX、ALTER INDEX和DROP INDEX等命令来操作视图和索引。 3. 创建视图:学习如何创建视图。掌握使用CREATE VIEW语句来定义视图的查询逻辑,包括选择要查询的列、指定查询条件等。 4. 修改和删除视图:学习如何修改和删除已存在的视图。了解使用ALTER VIEW和DROP VIEW命令来修改和删除视图的语法和用法。 5. 创建索引学习如何创建索引。了解使用CREATE INDEX语句来定义索引的语法和参数,包括指定要创建索引的列、选择索引类型等。 6. 修改和删除索引学习如何修改和删除已存在的索引。了解使用ALTER INDEX和DROP INDEX命令来修改和删除索引的语法和用法。 7. 优化使用视图和索引的查询:学习如何优化使用视图和索引的查询操作。了解如何合理地选择视图和索引的使用情景,以及如何根据查询需求进行性能优化。 8. 实践和练习:通过实际的练习和项目实践,加深对视图和索引的理解和应用。自己动手创建、修改和删除视图和索引,进行查询操作和性能测试。 这些步骤可以帮助你系统地学习MySQL中的视图和索引。建议在学习过程中结合官方文档、参考书籍和在线资源,以及进行实际的练习和实践,加深理解和掌握。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值