对于Oracle 10g和更高版本:除了不能使用本地索引且需要全局索引(例如唯一约束)的情况外,是否有任何理由支持全局索引而不是本地索引?
发布于 2011-09-02 19:49:19
在某个点上,使用索引的查询访问足够多的分区,以致本地索引将比全局索引慢。
例如,如果您的表按日期进行分区,但您只在状态列上查询。
发布于 2019-10-23 16:20:10
回答已经从利分到主要的回溯。
但他的答案只有在匹配记录的基数很小时才是正确的。如果要搜索列具有唯一或几乎唯一的值(但对于status列通常不是这样),这肯定是很糟糕的。在这种情况下,许多本地索引将以非常低的成功率访问,这会产生高无用的I/O,而且效率很低。在这种情况下,全局索引的工作效率要高得多。
但是,它取决于分区的数量,分区的大小与匹配记录的数量有关。
如果您选择了更大数量的记录,并有机会在许多分区中找到它们,那么这种回溯就不再有实际意义了。状态列通常是这样的,只有几个不同的值。
例如:
拥有一个有100个分区的表,例如by DATE,并且只想搜索一个status列:如果匹配记录的基数是10000,那么您可能会在每个分区中找到记录。在这种情况下,您将无法从全局索引中真正受益,尽管它可能会快几毫秒。但是,本地指数的好处往往克服了这种回溯。
反对本地索引的另一个原因可能是,索引维护需要更多的知识。例如,不能通过"ALTER重建“来像全局索引那样重建本地索引,因为每个分区都需要处理和重建。在24/7小时的手术中,这可能是一个很大的优势,但是有些人不喜欢这样的努力。
https://dba.stackexchange.com/questions/5355
复制相似问题