代码之家  ›  专栏  ›  技术社区  ›  davek

创建索引是否可以使用现有索引?

  •  3
  • davek  · 技术社区  · 15 年前

    我在A、B和C列上有单独的索引。我想在A+B+C三列上创建一个复合索引。

    我会有什么影响 现有的 索引在复合索引上具有 创造 是吗?数据库会利用它们吗,它们是无关的,还是会减慢创建新的复合索引的速度?

    我使用的是MySQL5.1。

    编辑 :btw表有几百万行。

    编辑2 :多亏了tster的建议:我在一个小得多的表(公认只有20000行)上尝试了这个方法,但是即使如此,当单个索引已经存在时,创建一个新的复合索引花费的时间也明显更长。

    2 回复  |  直到 15 年前
        1
  •  6
  •   MarkR    15 年前

    MySQL通常在添加索引时重建整个表,因此所有现有的表也会重建。这可能很慢。

    唯一的例外是使用innodb插件添加索引,但没有。

    据我所知,在构建索引时,它总是执行完整的表扫描,但是如果添加的索引与另一个索引具有相同(或子集)的列,它可以执行索引扫描。这些索引通常只在列的顺序不同时才有用。

    使用stock-mysql,索引越多,生成新的索引的速度就越慢,因为它也会重建现有的索引。

    有了这个插件,我觉得没什么区别。

    不管怎样,如果您打算添加多个索引,那么应该一次完成所有索引,而不是一次完成一个索引。

        2
  •  0
  •   Nestor    15 年前

    您现有的索引与 创造 新索引的。索引是磁盘上的物理内容,您要求数据库创建一个全新的索引,它的结构与现有的三个索引完全不同。

    (注意:我对MySQL没有具体的了解。)