在SQL索引上:有多少个不同的值太多了?与SELECT-only表无关的索引数?

时间:2017-03-24 18:10:00

标签: sql indexing database-performance

我是一个SQL新手,但这是我迄今为止收集的索引:

  1. 对具有太多不同值的列进行索引可能会适得其反,因为它需要更长时间遍历索引并一次检索一些记录,而不是直接从表中执行。

  2. 病理案例如(1)除外,索引总是以较慢的INSERT,UPDATE等为代价提高SELECT语句的速度。

  3. 我的问题是:

    • 是(1)是真的,如果是,有多少不同的值是“太多”?我正在考虑在两个年龄列上编制索引,这两个列在具有> 100M记录的表上共有139个不同的值(1-99,'年'; 1-11,'月'; 1-29,'天')。我能在这里获得很多收获吗?
    • 如果(2)为真,我的表将不会再次更新,这是否意味着我可以有几个索引,这将永远不会妨碍我的SELECT查询?

1 个答案:

答案 0 :(得分:2)

  1. 可能情况恰恰相反。具有很少不同值的列不是索引的良好候选者。通常,优化程序将评估使用索引的成本与完整扫描的成本。然后,优化器将选择成本最低的访问

  2. 如果您没有更新表,那么索引不应该是一个惩罚,除了可能的磁盘空间。但是,仅仅因为存在索引,并不一定意味着它将被使用;如上所述。