Oracle性能数据库大小增加
我有一个高层次的问题。假设我有一个需要30毫秒才能完成的SQL查询,它运行在一个有100万条记录的表上的一个索引列上。现在,如果表的大小增加到500万条记录,那么我应该期望查询花费5倍的时间(因为必须搜索5倍的索引),所以是150毫秒。如果这太简单了,我很抱歉,我有一个程序对一个表运行10个SQL(索引),这个表将增加这个系数,查询当前需要300毫秒,我担心这将增加到1.5秒。任何帮助都将不胜感激 您可以将索引查找想象为通过二叉树进行搜索,然后获取包含适当数据的页面。通常,索引会放入内存中,通过索引进行搜索会非常快。将数据大小乘以10将使树的深度增加3或4。对于内存中的比较操作,大多数查询都不会注意到这一点。(除了二叉b树之外,还有其他类型的索引,但这是考虑性能的一个方便模型。) 然后,数据提取可能会导致从磁盘读取页面的开销。这应该还是相当快的 因此,您的问题的简单答案是:否。但是,这假设查询类似于:Oracle性能数据库大小增加,oracle,Oracle,我有一个高层次的问题。假设我有一个需要30毫秒才能完成的SQL查询,它运行在一个有100万条记录的表上的一个索引列上。现在,如果表的大小增加到500万条记录,那么我应该期望查询花费5倍的时间(因为必须搜索5倍的索引),所以是150毫秒。如果这太简单了,我很抱歉,我有一个程序对一个表运行10个SQL(索引),这个表将增加这个系数,查询当前需要300毫秒,我担心这将增加到1.5秒。任何帮助都将不胜感激 您可以将索引查找想象为通过二叉树进行搜索,然后获取包含适当数据的页面。通常,索引会放入内存中,通过
select t.*
from table t
where t.indexcol = CONSTANTVALUE
并且,它假设查询只返回一行。随着表大小的增加,可能会影响性能的因素包括:
- 返回数据集的大小随着表的大小而增加。返回更多的值必然需要更长的时间。对于某些查询,性能更依赖于返回值的机制,而不是计算/获取数据
- 查询包含
或加入
分组依据
- 表的统计信息是最新的,因此优化器不会意外地选择完整表扫描而不是索引查找
- 您所处的环境内存有限,索引无法放入内存中。或者,整个表在变小时在内存中,但在变大时会产生缓存未命中的开销