数据库索引和组合

时间:2013-06-07 05:15:02

标签: database indexing

我在几个地方读过您使用任何字段来将查询结果限制为索引。但是假设您有一个应用程序,其中不同的查询使用不同的列组合。

例如,我们假设我们有三个查询如下:

  1. Select * from table1 where field1 = 'A';
  2. Select * from table1 where field1 = 'A' and field2 = 'B';
  3. Select * from table1 where field1 = 'A' and field3 = 'C';
  4. 为field1,one2和field3创建一个索引是否更好?或者更好的是为field1创建一个索引,一个用于field1和field2的组合,一个用于field1和field3的组合。

1 个答案:

答案 0 :(得分:3)

field1上的索引将有助于所有三个查询。 (field1, field2)(field1, field3)上的复合索引将有助于第一个查询以及第二个或第三个查询 - 并在field1上呈现非唯一索引冗余(因为可以使用复合索引)第一次查询)。

对于任何给定的索引,您必须权衡添加索引的成本与获得索引的好处。索引使用空间;索引使用添加,删除或更新行时的处理时间(通常)。如果你打算经常使用索引并且在使用它时提供足够的加速,那么好处就超过了成本。如果你很少使用索引,它可能不会为自己买单。如果表是动态的(行频繁更改),则索引的更新成本大于表相对静态(很少更改)的情况。

虽然当有更多索引(检查哪些索引是相关的)时,优化器必须更加努力,但很少是决定创建或不创建索引的决定因素。

通常,请确保您拥有与表相关的所有唯一索引。

如果你有信心(因为你已经测量过),他们会以足够大的幅度加快速度,并且会经常使用,以便为你带来整体利益。