lol*_*olo 4 java oracle jdbc prepared-statement
我知道PreparedStatement比Java中的Statement更快.
我不知道oracle db server是如何做到的.
PreparedStatement得到预编译在数据库服务器 - >少工作.它减少了数据库的负担.
String sql = "SELECT * FROM users u WHERE u.id = ?";
PreparedStatement pstmt = connenction.prepareStatement(sql);
pstmt.setLong(1, userId);
pstmt.executeQuery();
Run Code Online (Sandbox Code Playgroud)
查询缓存在数据库服务器中,只编译一次?
如果是,数据库服务器如何知道此查询之前执行过?
它缓存了多长时间?
查询缓存在数据库服务器中,只编译一次?
更确切地说,查询计划缓存在服务器上.运行查询时,RDBMS首先准备计划,然后执行它.准备计划需要解析查询,然后分析和优化它,考虑可用的索引和参与表上收集的统计信息.
如果是,数据库服务器如何知道此查询之前执行过?
通过将查询字符串与缓存中可用的其他查询进行比较.由于您使用参数化查询,因此另一个查询在文本上是相同的.缓存是第二大原因*使用查询参数:如果你准备这样的语句
// WRONG! Don't do it like this!
String sql = "SELECT * FROM users u WHERE u.id = "+userId;
PreparedStatement pstmt = connenction.prepareStatement(sql);
Run Code Online (Sandbox Code Playgroud)
所有的性能改进都将消失,因为提供不同的ID将使它成为需要新计划的不同查询.
*参数化查询的首要原因当然是避免注入攻击.