Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/elixir/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Oracle性能数据库大小增加_Oracle - Fatal编程技术网

Oracle性能数据库大小增加

Oracle性能数据库大小增加,oracle,Oracle,我有一个高层次的问题。假设我有一个需要30毫秒才能完成的SQL查询,它运行在一个有100万条记录的表上的一个索引列上。现在,如果表的大小增加到500万条记录,那么我应该期望查询花费5倍的时间(因为必须搜索5倍的索引),所以是150毫秒。如果这太简单了,我很抱歉,我有一个程序对一个表运行10个SQL(索引),这个表将增加这个系数,查询当前需要300毫秒,我担心这将增加到1.5秒。任何帮助都将不胜感激 您可以将索引查找想象为通过二叉树进行搜索,然后获取包含适当数据的页面。通常,索引会放入内存中,通过

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

您可以将索引查找想象为通过二叉树进行搜索,然后获取包含适当数据的页面。通常,索引会放入内存中,通过索引进行搜索会非常快。将数据大小乘以10将使树的深度增加3或4。对于内存中的比较操作,大多数查询都不会注意到这一点。(除了二叉b树之外,还有其他类型的索引,但这是考虑性能的一个方便模型。)

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

因此,您的问题的简单答案是:否。但是,这假设查询类似于:

select t.*
from table t
where t.indexcol = CONSTANTVALUE
并且,它假设查询只返回一行。随着表大小的增加,可能会影响性能的因素包括:

  • 返回数据集的大小随着表的大小而增加。返回更多的值必然需要更长的时间。对于某些查询,性能更依赖于返回值的机制,而不是计算/获取数据
  • 查询包含
    加入
    分组依据
  • 表的统计信息是最新的,因此优化器不会意外地选择完整表扫描而不是索引查找
  • 您所处的环境内存有限,索引无法放入内存中。或者,整个表在变小时在内存中,但在变大时会产生缓存未命中的开销

简短回答:不。索引的关键在于它们提供(远)快于O(N)的查找性能。uniuqe索引查找单行所需的I/O量几乎是恒定的,无论表的大小如何(当然,有些阈值是“常量”)不再是真的,但是数量只会增加一个或两个额外的I/O操作)。读取表中所有行所需的时间当然直接取决于表中的行数。谢谢,这正是我所希望的!