Java 使用JDBC优化PostgreSQL任意语句
PostgreSQL支持“ANY”SQL操作符,对于依赖JDBC/PreparedStatements的Java程序员来说,这是一个非常好的替代“IN”语句的方法。例如,我们可以做一些事情,而不是创建具有数千个ID的长SQL字符串: 我最近偶然发现了一个声明,通过更改以下内容,该声明在执行“任意”条款方面提高了100倍:Java 使用JDBC优化PostgreSQL任意语句,java,postgresql,jdbc,prepared-statement,Java,Postgresql,Jdbc,Prepared Statement,PostgreSQL支持“ANY”SQL操作符,对于依赖JDBC/PreparedStatements的Java程序员来说,这是一个非常好的替代“IN”语句的方法。例如,我们可以做一些事情,而不是创建具有数千个ID的长SQL字符串: 我最近偶然发现了一个声明,通过更改以下内容,该声明在执行“任意”条款方面提高了100倍: "WHERE search_column = ANY (ARRAY[15368196, -- 11,000 other keys --)])" 为此: "WHERE sear
"WHERE search_column = ANY (ARRAY[15368196, -- 11,000 other keys --)])"
为此:
"WHERE search_column = ANY (VALUES (15368196), -- 11,000 other keys --)"
问题:
final PreparedStatement statement = connection.prepareStatement(
"SELECT my_column FROM my_table where search_column = ANY (VALUES (?), (?), (?), ...)"
);
有关我为什么使用“ANY”子句的更多上下文/背景信息,请参见:
提前谢谢 你能给我们看一下分析的结果吗?用于普通SELECT,也用于执行准备好的语句。这都是关于(最好的)查询计划!我想你做不到。
final PreparedStatement statement = connection.prepareStatement(
"SELECT my_column FROM my_table where search_column = ANY (VALUES (?), (?), (?), ...)"
);