在我们的生产数据库中,我们有4个列表,并且没有PK,UK限制它。一列只有一个非空约束。这个表上的插入很慢,当我检查索引时,有一个索引构建在所有列上。
这是一张普通的桌子而不是物联网。我真的没有看到所有列索引的需要,但想知道开发人员为什么创建它?
欣赏你的想法?
答案 0 :(得分:2)
它可能是有用的,即如果你(主要)查询所有列,oracle根本不必访问该表,但可以从索引获取所有数据。虽然插入需要更长的时间,因为每次都必须由dbms维护更大的索引。
答案 1 :(得分:1)
可能有用的一个案例是,
例如,假设您正在尝试检查此表中是否存在记录,并且您必须在所有四列上都有连接。因此,在这种情况下,如果您编写了如下所示的相关查询,
SELECT <something>
FROM table_1 t1
WHERE EXISTS
(SELECT 1 FROM table_t2 t2 where t1.c1=t2.c1 and t1.c2=t2.c2 and t1.c3=t2.c3 and t1.c4=t2.c4)
除了上述情况,从开发人员方面来看,这对我来说是错误的。
答案 2 :(得分:0)
索引可以更好地进行查询优化,但会导致更新/插入速度变慢,因为每次修改都需要更新索引。
如果这些表首次使用是查询,并且仅在特定时段(例如仅在一天的开头或结束时发生批量)发生插入,则可以在更新表之前删除索引,然后将其还原。
此外,需要分析所有这些表的所有查询以查看哪些索引有用而哪些不有用?
无论如何,您需要在删除这些索引之前询问开发人员。