在 SQL 索引上:有多少不同的值太多了?与 SELECT 无关的索引数量 - 仅 table?
On SQL indexes: how many distinct values are too many? number of indexes irrelevant for SELECT-only table?
我是 SQL 新手,但这是我目前收集到的关于索引的信息:
在具有太多不同值的列上建立索引可能会适得其反,因为它会花费更长的时间遍历索引并一次检索几条记录,而不是直接从 table.
除了(1)等病态情况,索引总是以较慢的 INSERT、UPDATE 等为代价提高 SELECT 语句的速度
我的问题是:
- (1) 是否为真,如果是,有多少个不同的值 "too many"?我正在考虑在两个年龄列上建立索引,这两个列在 table 超过 1 亿条记录。我在这里会收获很多吗?
- 如果 (2) 为真,并且我的 table 将不再更新,这是否意味着我可以在其上拥有多个索引并且这永远不会妨碍我的 SELECT 查询?
情况可能恰恰相反。具有很少不同值的列不是索引的良好候选者。通常,优化器会评估使用索引的成本与完整扫描的成本。然后优化器会选择成本最低的访问
如果你从来没有更新过 table,那么索引应该不是真正的惩罚,也许磁盘 space 除外。但是,仅仅因为索引存在,并不一定意味着它会被使用;按照上面的 1.
我是 SQL 新手,但这是我目前收集到的关于索引的信息:
在具有太多不同值的列上建立索引可能会适得其反,因为它会花费更长的时间遍历索引并一次检索几条记录,而不是直接从 table.
除了(1)等病态情况,索引总是以较慢的 INSERT、UPDATE 等为代价提高 SELECT 语句的速度
我的问题是:
- (1) 是否为真,如果是,有多少个不同的值 "too many"?我正在考虑在两个年龄列上建立索引,这两个列在 table 超过 1 亿条记录。我在这里会收获很多吗?
- 如果 (2) 为真,并且我的 table 将不再更新,这是否意味着我可以在其上拥有多个索引并且这永远不会妨碍我的 SELECT 查询?
情况可能恰恰相反。具有很少不同值的列不是索引的良好候选者。通常,优化器会评估使用索引的成本与完整扫描的成本。然后优化器会选择成本最低的访问
如果你从来没有更新过 table,那么索引应该不是真正的惩罚,也许磁盘 space 除外。但是,仅仅因为索引存在,并不一定意味着它会被使用;按照上面的 1.