Fra*_*fka 6 java database oracle postgresql jdbc
我试图用JDBC编写一个独立于数据库的应用程序.我现在需要一种从某些表中获取前N个条目的方法.我看到setMaxRowsJDBC中有一个方法,但我觉得使用它并不舒服,因为我害怕数据库会推出所有结果,只有JDBC驱动程序会减少结果.如果我需要在具有十亿行的表格中获得前5个结果,这将打破我的脖子(该表具有可用的索引).
为每种类型的数据库编写特殊的SQL语句并不是很好,但是会让数据库做出聪明的查询计划并停止获取超出必要的结果.
我可以依靠setMaxRows告诉数据库不起作用吗?
我想在最糟糕的情况下,我不能依赖于希望的方式工作.我最感兴趣的是Postgres 9.1和Oracle 11.2,所以如果有人有这些数据库的经验,请向前迈进.
将使数据库进行巧妙的查询规划并停止获取不必要的结果。
如果你使用
SELECT * FROM tbl ORDER BY col1 LIMIT 10; -- slow without index
Run Code Online (Sandbox Code Playgroud)
或者:
SELECT * FROM tbl LIMIT 10; -- fast even without index
Run Code Online (Sandbox Code Playgroud)
甲骨文:
SELECT *
FROM (SELECT * FROM tbl ORDER BY col1 DESC)
WHERE ROWNUM < 10;
Run Code Online (Sandbox Code Playgroud)
..那么只会返回10 行。但是,如果您在选择前 10 名之前对行进行排序,则所有基本符合条件的行都将在排序之前被读取。
匹配索引可以避免这种开销!
如果您不确定 JDBC 实际发送到数据库服务器的内容,请运行测试并让数据库引擎记录收到的语句。在 PostgreSQL 中你可以设置postgresql.conf:
log_statement = all
Run Code Online (Sandbox Code Playgroud)
(并重新加载)以记录发送到服务器的所有语句。请务必在测试后重置该设置,否则您的日志文件可能会变得巨大。
| 归档时间: |
|
| 查看次数: |
4544 次 |
| 最近记录: |