让我们假设我们有一个带有索引列(类别)的表(汽车) 包含'A','B','C'之类的值。
如果我想知道此更新是在以下条件下使用的,请调整此列上的更新:
update cars set category = 'Class A' where category = 'A';
那么最好的解决方案是什么?
或
答案 0 :(得分:0)
让我做些解释,更新将根据数据分布使用索引
70% Status='A'
20%'B'
10% 'C'
然后Status='A'
在全表扫描中会更好,因为它可以获取表中的大多数数据,但是如果要获取'C',则索引在访问特定数据时会更好。
但是对于您的update,您有一个索引,优化器将(大部分时间)找到更好的执行和查询计划。那你为什么担心呢?比平时要花更多时间吗?
如果您有大量数据并想要更新它们,则第一种方法将是执行索引操作,如果此表被击中(很多dml操作)并且包含多个索引,则需要更新统计信息,此查询将为您提供上次统计信息更新时的信息(从user_tables中选择last_analyzed,其中table_name ='urtable';)
Alter Index Index_Name Disable
->仅当其基于函数的索引时,此语句才会禁用该索引。您可以使用unusable
或更好的方法,并建议使其不可见。
Alter Index Index_Name rebuild
就像您再次创建索引一样,它回收了空间。当您有大量数据更改时,您可以考虑一下。请注意,您需要与索引相同的空间。