【问题标题】:Question on indices关于指数的问题
【发布时间】:2011-11-14 20:57:14
【问题描述】:

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

  1. 如果我想通过用户名进行选择,并开始查询日期.....它会使用上面的索引还是我需要指定一个额外的索引?
  2. 如果标题和开始日期唯一标识,但我还将用户名添加到主键中,这会使其成为超级键吗?

【问题讨论】:

    标签: sql firebird indices


    【解决方案1】:

    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,然后(如果必要)在用户名字段上创建单独的索引。

    【讨论】:

    • 因此,如果我在标题和开始日期上创建一个主键,然后仅在用户名上创建一个单独的索引.....它会在所有 3 列查询时使用正确的索引:用户名,开始日期,标题?
    • FB 在这种情况下将使用两个索引。此外,单独的索引将为查询优化器提供额外的选择。
    猜你喜欢
    • 1970-01-01
    • 2015-09-27
    • 2023-01-08
    • 2021-10-29
    • 1970-01-01
    • 1970-01-01
    • 2020-08-25
    • 2011-02-03
    • 1970-01-01
    相关资源
    最近更新 更多