SELECT查询的性能- Oracle/JDBC



我在系统中有一个现有查询,这是一个简单的选择查询,如下所示:

SELECT <COLUMN_X>, <COLUMN_Y>, <COLUMN_Z> FROM TABLE <WHATEVER>

随着时间的推移,<WHATEVER>在记录方面呈增长趋势。有什么方法可以提高这里的性能吗?开发人员使用Statement接口。我相信PreparedStatement在这里没有帮助,因为查询只执行一次。

还有什么可以做的吗?其中一列是主键,其他列是VARCHAR(如果信息有帮助)

查询是否有谓词?还是总是返回表中的所有行?

如果你总是返回所有的行,覆盖索引在column_x, column_y, column_z将允许Oracle仅仅扫描索引,而不是做一个表扫描。查询仍然会随着时间的推移而变慢,但索引的增长速度应该比表的增长速度慢。

如果要返回行的子集,那么从性能的角度来看,可能有其他索引更有利。

您可以在SQL查询调优之外进行任何优化吗?如果是,这里有一些建议:

  • 尝试将表放在内存中(如MySQL中的内存存储引擎)或在DB中进行任何其他优化
  • 在java中缓存ResultSet仅在表内容更改时再次查询。如果表只有插入,没有更新或删除(一厢情愿的想法),那么可以使用SELECT COUNT(*) FROM table。如果返回的行与上一次不同,则只在需要时触发原始查询并更新缓存。

最新更新