gpt4 book ai didi

oracle - 对只有 5 个不同值的列进行索引 - 值得吗?

转载 作者:行者123 更新时间:2023-12-04 06:29:12 26 4
gpt4 key购买 nike

我有一个最多可能有 5.000.000 行的表。该表中的一列在查询中单独使用,但该列只有 5 个可能的值,目前我有 10.000 行,根据解释计划,在该列上使用我的索引是没有意义的。

会不会,或者我不应该打扰索引

编辑:这是目前的两个解释计划
Without index http://img706.imageshack.us/img706/1903/noindex.png
对比
With forced index via hints http://img692.imageshack.us/img692/8205/indexp.png
后一个图像我强制使用带有提示的索引。

最佳答案

这取决于几件事。

第一,值(value)观的分布。如果您只有五个不同的值,但其中一个占表中 99.9999% 的行,那么显然您不希望优化器使用该值的索引,但您可能希望它为其他值使用它。在像这样的某些情况下,值得使用基于函数的索引来确保您只索引感兴趣的值而不是那些只是占用空间的值。

其次,是否可以在不访问表的情况下使用该索引回答查询?

请注意,重要的不仅仅是将被访问的行的百分比,还有需要访问的表的块数。例如,如果您有一个包含 1000 个块和平均每个块 30 行的表,并且一列有 30 个不同的值(每个值出现在 1000 行中),那么需要访问以读取每一行的块数单个值在 1000/30=34(值得使用索引)和 1000(不值得使用索引)之间变化,具体取决于行的分布方式。这由索引的聚集因子表示——如果它的值接近表中的行数,那么索引不太可能被使用,如果它接近块数,那么它更有可能被使用用过的。

此外,您可能会查看索引压缩,看看是否可以节省空间。

小心位图索引——它们对同时受到多个 session 修改的系统不友好(例如,两个人同时向索引表中插入行)。

如果您确实想提高带有这五个值的谓词的查询的效率,则一个更有效的策略是使用分区,部分原因是查询中的分区修剪,但也因为优化器知道只有一个分区将被访问,并且可以使用分区级别的统计信息而不是全局统计信息。

关于oracle - 对只有 5 个不同值的列进行索引 - 值得吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1879626/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com