部分密钥查找

时间:2013-03-25 01:30:48

标签: sql sql-server sqlite indexing firebird

假设有一个非主键列(A,B,C,D)的表,其中有一个索引(A,B,C,D)

涉及(A,B,C,D)子集的查询是否会使用索引?如上所述,部分键查找存在什么样的特性?

我特别感兴趣的是它在SQL Server,Sqlite,Firebird中是如何工作的。

2 个答案:

答案 0 :(得分:4)

使用索引的初始子集的查询应该使用索引。

因此,(A),(A)和(B)以及(A)和(B)和(C)上的等连接应该使用索引。

实际上,您也可以添加不等式,因此,索引应该支持以下所有内容:

  • x.A = y.A
  • x.A = y.A和x.B> y.B
  • x.A = y.A且x.B = y.B
  • x.A = y.A且x.B = y.B且x.C> y.C
  • x.A = y.A且x.B = y.B且x.C = y.C
  • x.A = y.A且x.B = y.B且x.C = y.C且x.D> y.D
  • x.A = y.A且x.B = y.B且x.C = y.C且x.D = y.D

答案 1 :(得分:3)

是,如果搜索键与索引字段的顺序相同。

否则没有。假设您已获得进入图书馆的指示,请查看第3章第3页的“了不起的盖茨比”。这就像使用多字段索引一样。

现在说,你被告知要获得第3章,第3页......没有书名。你必须查看每本书。