我从Oracle出版商那里得到了一本Oracle 9i书 在它里面写的是
Index is bad on a table which is updated/inserted new rows frequently
这是真的吗?或者它只是关于Oracle [而不是其他RDBMS包]?
Edit
我在MySQL中有这样的表
此表只允许写入/读取 当PK创建索引时,表格设计是否已损坏? 如果是,如何解决这类问题[AI是主键]
答案 0 :(得分:4)
对于某个范围内的任何数据库都是如此。每当索引列更新时,索引也必须更新。每个附加索引都会增加额外开销这对您的具体情况是否重要取决于您创建的索引和服务器运行的工作负载。通过基准测试可以最好地发现性能影响。
答案 1 :(得分:2)
索引仅用于检索数据。因为它们是指向数据位置的指针,所以INSERT / UPDATE / DELETE语句维护索引的速度较慢。即使这样,索引也可能会碎片化,因为删除/更新会发生变化 - 这就是为什么有工具来维护这个和表统计信息(优化器都使用它们来确定EXPLAIN计划)。
请记住索引不是ANSI - 这是语法和语法的奇迹。术语非常相似。但是提供它的数据库之间的功能几乎相同。例如,Oracle只有“索引”,而MySQL和SQL Server都区分了集群(每个表一个)和非集群索引。
解决有关主键的更新。主键是唯一的,并且被认为是不可变的(尽管它实际上可以更新,尽管该值必须是列的唯一值)。从表中删除会使索引分段,如果性能成为问题,则需要使用数据库供应商特定工具进行监视。
答案 2 :(得分:2)
高度不稳定的表上的索引不是“坏”。只是对DML操作有性能影响。我认为作者试图说的是你应该仔细考虑对这些活动表的索引的需求。
就像在一切计算中一样,这都是关于权衡的。正如@Michael基本上所说,“它取决于”。您也可能在表上具有较高的查询率,其中表上的索引避免了大量的全表扫描。在这种情况下,您的索引维护开销可能值得从查询索引中获得的好处。
另外,我可能不会买一本9i书,除非这是一个真正的讨价还价。我建议您阅读Tom Kyte提供的大部分内容,尤其是“专家Oracle数据库架构”或“设计有效的Oracle”。