关于指数的问题

时间:2011-09-11 18:27:21

标签: sql firebird indices

如果我有一个包含以下列的表作为主键:Username, Title, Start Date,那么数据库将自动在其上创建索引。

  1. 如果我想通过用户名选择,并为查询开始日期......是否会使用上面的索引或我是否需要指定其他索引?
  2. 如果标题和开始日期唯一标识,但我也在主键上添加用户名,那会使它成为超级密钥吗?

1 个答案:

答案 0 :(得分:4)

  

1)如果我想通过用户名选择,并为查询开始日期.....它会使用上面的索引还是我需要指定一个额外的索引?

你有一个复杂的条件,比如说:

username = 'blah-blah-blah' AND startdate > '01.01.2010'

如果您的表的PK定义如下:

PRIMARY KEY (Username, Title, StartDate)

然后索引将用于涉及用户名字段的第一部分。 startdate值将按自然顺序进行评估。

如果您希望索引用于复杂条件的两个部分,请在startdate上创建附加索引或更改PK中字段的顺序:

PRIMARY KEY (Username,  StartDate, Title)
  

2)如果标题和开始日期唯一标识,但我也添加了用户名   对于主键,是否会使它成为一个超级键?

最好不要滥用附加字段的唯一索引。在您的情况下,在标题和开始日期创建PK,然后(如果必要)在用户名字段上创建单独的索引。