Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/postgresql/9.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
Java 使用JDBC优化PostgreSQL任意语句_Java_Postgresql_Jdbc_Prepared Statement - Fatal编程技术网

Java 使用JDBC优化PostgreSQL任意语句

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

PostgreSQL支持“ANY”SQL操作符,对于依赖JDBC/PreparedStatements的Java程序员来说,这是一个非常好的替代“IN”语句的方法。例如,我们可以做一些事情,而不是创建具有数千个ID的长SQL字符串:

我最近偶然发现了一个声明,通过更改以下内容,该声明在执行“任意”条款方面提高了100倍:

"WHERE search_column = ANY (ARRAY[15368196, -- 11,000 other keys --)])"
为此:

"WHERE search_column = ANY (VALUES (15368196), -- 11,000 other keys --)"
问题

  • PostgreSQL JDBC驱动程序使用哪种语法?我怀疑createArrayOf()方法正在创建数组[]vs VALUES(),但我不知道如何验证这一点
  • 事实上,如果createArrayOf()方法正在创建数组[],那么使用VALUES()的最佳方法是什么 我不想做这样的事情:

    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 (?), (?), (?), ...)"
    );