Mysql索引键的用途是什么?

Mysql索引键的用途是什么?,mysql,optimization,indexing,Mysql,Optimization,Indexing,嗨,我是mysql的新手 以下是我的问题: Mysql索引键的用途是什么 定义索引键和不定义索引键对mysql查询有影响吗 所有主键都是默认索引键吗 多亏了一百万,在一列(或一组列)上定义一个索引可以大大加快在该列(或一组列)上的搜索速度,但需要额外的磁盘空间 2-是的,不同之处在于使用该列的查询速度要快得多 3-是的,正如通常按主键搜索一样,该列始终被索引是有意义的 阅读有关MySQL索引的更多信息。索引实际上是一组额外的记录。没别的了 使索引访问速度更快的是: 在内部,引擎将索引放入缓冲区

嗨,我是mysql的新手

以下是我的问题:

  • Mysql索引键的用途是什么

  • 定义索引键和不定义索引键对mysql查询有影响吗

  • 所有主键都是默认索引键吗


  • 多亏了一百万,在一列(或一组列)上定义一个索引可以大大加快在该列(或一组列)上的搜索速度,但需要额外的磁盘空间

    2-是的,不同之处在于使用该列的查询速度要快得多

    3-是的,正如通常按主键搜索一样,该列始终被索引是有意义的


    阅读有关MySQL索引的更多信息。

    索引实际上是一组额外的记录。没别的了

    使索引访问速度更快的是:

    • 在内部,引擎将索引放入缓冲区的可能性大于放入整个表行的可能性
    • 索引更小,因此解析它意味着读取更少的硬盘块
    • 索引已经排序,因此查找给定值很容易
    • 如果不为null,则速度更快(出于各种原因,但最重要的是要知道引擎不会在索引中存储null值)
    要知道索引是否有用并不容易猜测(显然我不是在谈论主键),应该进行调查。以下是一些可能会减慢您操作速度的对应项:

    • 它会减慢索引字段的插入和更新速度
    • 它需要更多的维护:必须为每个索引构建统计信息,因此如果添加许多索引,计算可能需要更长的时间
    • 当统计数据不是最新的时,它可能会减慢查询速度。这种影响可能是灾难性的,因为发动机实际上会“走错方向”
    • 当查询不充分时,它可能会减慢速度(无论如何,索引不应该是一个规则,而是一个例外:没有索引,除非对某些查询有强烈的需求。我知道通常每个表都至少有一个索引,但它是在调查之后出现的) 我们可以对最后一点做很多评论,但我认为每一个案例都是特殊的,互联网上已经有很多这样的例子
    现在关于您的问题“所有主键都是默认索引键吗?”,我必须说,优化器不是这样工作的。当表中定义了各种索引时,将使用动态数据和一些其他静态数据(索引统计)来编译更有效的索引组合,以达到最佳性能。本质上没有默认索引,每种情况都会导致不同的结果

    问候