2009-09-18 75 views
1

我试图加速在已经有一些索引的MySQL表中查询SELECT。希望对同时(由其他客户端)运行的频繁INSERT INTO查询没有显着影响。这些表拥有数百万个条目,并且已经通过了技嘉的大小(他们有一个BLOB字段)。MySQL:哪个更好,单独索引或相同索引?

这些表格有一对描述连续时间间隔的字段(可以是以微秒为单位的时间间隔,也可以是一些执行或版本等)。这两个字段被编入索引;我有两个索引,一个只用于其中一个字段(当我查询时),另一个用于两个字段(这些字段也可以出现在许多查询中)。

其他两个候选索引来自标识符(例如,文件名),因为它在查询中也很常用。

一位同事建议我们在前两个索引中加入标识符。不过,我有这样的感觉,它有一个单独键更有意义。我正在准备测试以确定哪个更好,但我预计这需要几天。与此同时,我正在寻找过去的经验和/或建议。

所以我的问题是:

  1. 这是理想,创建用于标识一个新的指数?或者将其纳入区间索引?即,许多标识符可以具有相同的间隔,并且许多间隔可以具有相同的标识符。
  2. 这两个选项中的哪一个应该消耗更多的磁盘空间,特别是在数百万行的表中?我相信“更快”的一个,无论哪一个将是最耗费空间的。
  3. 我不知道是否创建新的索引(例如,单独的索引选项)没有解决任何问题,也没有什么帮助。在这种或类似的情况下你过去的经历是什么?任何建议/文件,我可以专门研究这个问题?

回答

2

确定为表定义哪些索引取决于很多因素。其中最重要的之一就是你想要运行的查询。

在这种情况下,如果不知道表结构以及您想要如何在工作中包含标识符的查询,则很难说如何构建索引。

请记住,MySQL的每个查询限制只有一个索引。这意味着查询优化器一次只能为任何给定的表使用一个索引(如果有的话)。

+0

Hi Avi。每索引一个索引的细节非常重要,我现在看到它是如何证明我的同事的论证。 AFAICT,你已经回答了我的问题。谢谢。 – jbatista 2009-09-18 12:07:13