【问题标题】:SQL - 1 index on 2 columns or multiple indexesSQL - 2 列或多个索引上的 1 个索引
【发布时间】:2017-11-19 01:10:03
【问题描述】:

考虑一个 sql 表 Employer。

A 列 -- (int) 唯一标识列。在选择查询中不用作 where 子句的一部分。

Column B -- (int) 非唯一列。在选择查询中经常作为 where 子句的一部分使用。

以下哪种索引选择更适合设计数据库表以实现良好的性能和低维护

1) A 列上的 1 个聚集的唯一主键和 B 列上的 1 个非聚集索引

2) 列 B、A 上的 1 个聚集的唯一主键(复合主键)

3) A 列上的 1 个非聚集的唯一主键和 B 列上的 1 个聚集索引

也欢迎任何其他建议。提前致谢

【问题讨论】:

  • 将 A 列用于 Where 子句。如果是,那么第二个索引将无济于事。排序在多列索引中很重要。
  • 什么 RDBM?我认为某些细节将是特定于供应商的。
  • A 列不会用作 where 子句的一部分
  • 这是用于 SQL Server 的

标签: sql-server performance clustered-index non-clustered-index


【解决方案1】:

选择选项 1。
创建主键时,始终瞄准最短的列。原因是该列将用于所有其他索引。另外我希望你说的身份不是随机生成的值,因为它会影响你的写作表现。

【讨论】:

  • 谢谢。是的,它是按顺序递增的。选项3呢? (不久前编辑过)。
  • 通常聚集索引是在 ID 列上创建的。理想情况下,这是独一无二的。当您将创建另一个表时,假设雇员,那么您很可能会引用雇主表中的 ID 列。而且因为您有聚集索引,您可以快速访问特定员工的所有雇主数据。请记住,聚集索引意味着数据根据该列进行物理排序。
【解决方案2】:

选择第一个,第二个会占满空间,因为它是聚集的,很难陪伴,因为它是复合的。首先选择索引小,容易陪伴

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-11-05
    • 2018-11-05
    • 2017-01-10
    • 2013-04-22
    • 2011-04-13
    • 1970-01-01
    • 2019-01-20
    • 1970-01-01
    相关资源
    最近更新 更多