很多时候,当插入一条记录后,希望马上获得插入的主键id,
不少获得这个id的方法是 select max(id) from tablename;
为了获得这个id需要多执行一次sql语句。
PostgreSQL提供了RETURNING语句在插入后立刻获得这个id,具体方法如下:
|
1
|
INSERT
INTO
test(
name
)
values
(
'name'
) RETURNING id;
|
|
1
2
3
4
5
6
7
8
9
|
String sql =
"INSERT INTO test(name) VALUES (?)"
;
PreparedStatement pstmt = conn.prepareStatement(sql,Statement.RETURN_GENERATED_KEYS);
pstmt.setString(
1
,
"name"
);
pstmt.executeUpdate();
ResultSet generatedKeys = pstmt.getGeneratedKeys();
if
(generatedKeys.next()) {
long
id = generatedKeys.getLong(
1
);
//logger.info("insert id :" + id);
}
|
|
1
2
3
|
select max(id)方式:
72
秒
RETURNING 方式:
47
秒
RETURNING方式的性能是select max(id)方式的
1.5
倍
|
|
1
|
conn.prepareStatement(sql,Statement.RETURN_GENERATED_KEYS);
|
本文介绍了一种在PostgreSQL中高效获取插入记录后自动生成的主键ID的方法,并通过对比SELECT MAX(id)的方式,展示了使用RETURNING子句进行优化后的性能提升。
1154

被折叠的 条评论
为什么被折叠?



