Oracle性能数据库大小增加



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

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

读取数据可能会导致从磁盘读取页面的开销。那应该还是相当快的。

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

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

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

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

最新更新