【问题标题】:Best practice for indexing foreign keys on a large table在大表上索引外键的最佳实践
【发布时间】:2011-04-04 01:32:38
【问题描述】:

我有一个包含近 300 万行的大表 (SQL Server 2008)。它目前在其主键上有一个聚集索引,在其外键上有一个非聚集索引。

几乎所有对表的查询都是基于外键读取的。

  1. 是否应该将表上的索引更改为针对外键?
  2. 执行此操作的最佳流程是什么?

谢谢

【问题讨论】:

  • FK 列中有多少个值?根据数量更改索引几乎没有什么好处 - IE:两个对索引毫无价值。
  • 我不确定我是否理解这个问题,但您是在问有多少潜在的 FK 值?如果是这样,大约 16,000....
  • @OMGPonies,在外键值上设置聚集索引不会帮助他的 SQL 查询吗?他的查询会更快,因为它不必对行的数据进行书签查找。
  • @Micky McQuade - 这是我的理解,问题是表格太大,很难对其进行任何结构更改......
  • @Micky McQuade:如果SELECT DISTINCT fk_column FROM YOUR_TABLE 返回几个值,则索引(无论是否聚集)都无济于事。因为不足以区分记录。潜在价值无关紧要。

标签: sql sql-server indexing clustered-index


【解决方案1】:

在不了解您的情况的情况下,我认为将非聚集索引更改为非聚集覆盖索引将是最好的解决方案。

http://www.simple-talk.com/sql/learn-sql-server/using-covering-indexes-to-improve-query-performance/

【讨论】:

    猜你喜欢
    • 2023-04-08
    • 2022-01-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-06-29
    • 2016-07-10
    • 1970-01-01
    相关资源
    最近更新 更多