Mysql Index键有什么用?

时间:2010-05-27 21:51:19

标签: mysql optimization indexing

嗨,我是mysql的新手

以下是我的问题:

  1. Mysql Index键有什么用?

  2. 在定义索引键和不使用索引键时,它是否会对mysql查询产生影响?

  3. 所有主键都是默认索引键吗?

  4. 万分感谢

2 个答案:

答案 0 :(得分:3)

1-在列(或列集)上定义索引可以更快地搜索该列(或集合),但会占用额外的磁盘空间。

2-是的,区别在于使用该列的查询会更快。

3-是的,由于通常使用主键进行搜索,因此始终对该列进行索引是有意义的。

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

答案 1 :(得分:0)

索引确实是一组额外的记录。而已。

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

  • 在内部,引擎放入索引的可能性大于整个表行
  • 索引较小,因此解析它意味着读取较少的硬盘块
  • 索引已经排序,因此很容易找到给定的值
  • 如果不为空,则速度更快(出于各种原因,但最重要的是要知道引擎不会在索引中存储空值

要知道索引是否有用并不容易猜到(显然我不是在谈论主键),应该进行调查。以下是一些可能会减慢您的运营速度的对手:

  • 它会降低索引字段的插入和更新速度
  • 需要更多维护:必须为每个索引构建统计信息,因此如果添加多个索引,计算可能会花费更长的时间
  • 当统计信息不是最新时,它可能会减慢查询速度。这种影响可能是灾难性的,因为引擎实际上会采取错误的方式"
  • 当查询不充分时,它可能会变慢(无论如何索引不应该是规则而是例外:没有索引,除非是对某些查询的强烈要求。我知道通常每个表都至少有一个索引,但调查后来了) 我们可以对这最后一点发表评论,但我认为每个案例都很特殊,很多例子已经存在于互联网上。

现在关于你的问题'所有主键都是默认的索引键吗?',我必须说优化器的工作方式与此类似。当表中定义了各种索引时,将使用动态数据和其他一些静态数据(索引统计)编译更高效的索引组合,以达到最佳性能。没有默认索引本身,每种情况都会导致不同的结果。

问候。