Oracle性能数据库大小增加

时间:2014-08-16 18:23:41

标签: oracle

我有一个高级别的问题。假设我有一个需要30毫秒才能完成的SQL查询,它会在具有100万条记录的表上的索引列上运行。现在,如果表大小增加到500万条记录,我应该期望查询需要5倍的时间(因为必须搜索索引的5倍),所以150毫秒。我道歉,如果这太简单了,我有一个程序运行10 SQL(索引)对一个表将增加这个因素,查询目前需要300毫秒,我担心这将增加到1.5秒。任何帮助将不胜感激!

1 个答案:

答案 0 :(得分:1)

您可以将索引查找视为通过二叉树搜索,然后使用适当的数据获取页面。通常,索引适合内存,通过索引搜索会非常快。将数据大小乘以10会使树的深度增加3或4.对于内存中的比较操作,这对于大多数查询来说是不明显的。 (除了二进制b树之外还有其他类型的索引,但这是考虑性能的一种方便的模型。)

然后,数据提取可能会导致从磁盘读取页面的开销。那应该还是很快的。

所以,你问题的简单答案是:不。但是,这假设查询类似于:

select t.*
from table t
where t.indexcol = CONSTANTVALUE

并且,它假定查询只返回一行。随着表格大小的增加,可能影响性能的因素包括:

  • 返回数据集的大小随表的大小而增加。返回更多值必然需要更长时间。对于某些查询,性能更依赖于返回值的机制,而不是计算/获取数据。
  • 查询包含joingroup by
  • 该表的统计信息是最新的,因此优化器不会意外选择全表扫描而不是索引查找。
  • 您处于内存受限的环境中,索引不适合内存。或者,整个表在较小时在内存中,但随着它变大而导致缓存未命中的开销。