Wil*_*ill 6 sql oracle indexing performance
我想知道这个指数的表现:
我有一个"无效"的varchar(1)列,它有2个值:NULL或'Y'我有一个索引(无效),以及(invalid,last_validated)Last_validated是一个日期时间(这用于一个不相关的SELECT查询)
我正在标记表中的少量项目(1-5%),并将其作为"要删除".
我是这样的
DELETE FROM items WHERE invalid='Y'
Run Code Online (Sandbox Code Playgroud)
它不会对无效项执行全表扫描.
一个问题似乎是,实际的DELETE现在非常慢,可能是因为所有索引都被删除了.
位图索引会为此提供更好的性能吗?或者根本没有索引?
对此有两个想法...
使用 NULL 来表示“Y”的相反值可能不是一个好主意。Null 意味着“我不知道这个值是什么”或“问题没有有意义的答案”。您确实应该使用“N”作为“Y”的反义词。这将消除搜索有效项的问题,因为当该列仅包含非空值时,Oracle 不会使用该列上的索引。
您可能需要考虑CHECK CONSTRAINT在此类列上添加 来确保仅输入合法值。
然而,这些更改都不一定对 DELETE 性能产生任何影响。