postgresql 关于geo 按距离排序返回 性能测试
2016-11-21 00:58
447 查看
postgresql 9.5.1 版本
cpu 内存 8g;
数据量 : 1078000 ;
查询1km以内的点
查询耗时 650毫秒
查询5km 以内的点
耗时 1.2s 左右
public static void main(String[] args) {
Connection c = null;
try {
Class.forName("org.postgresql.Driver");
c = DriverManager
.getConnection("jdbc:postgresql://192.168.1.106:5432/postgres",
"Admin", "");
//造数据
double x= 0.002;
double y = 0.002 ;
// StringBuffer buffer = new StringBuffer("");
// for (int i=50; i<100;i++){
// for (int j =1000;j<10000;j++){
// buffer.append("INSERT INTO mylocation (geom,name,x,y) VALUES ( ")
// .append(" ST_GeomFromText('POINT(")
// .append(""+(x+i*0.001))
// .append(" ")
// .append(""+(y+j*0.001))
// .append(")', 4326),'zhangsan',")
// .append(""+(x+i*0.001)+","+(y+j*0.001)+");");
// }
// }
// String sql = "INSERT INTO mylocation (geom,name,x,y) VALUES ( " +
// " ST_GeomFromText('POINT(? ?)', 4326),'zhangsan',?,? " +
// ");";
// PreparedStatement preparedStatement = c.prepareStatement(buffer.toString());
//
// boolean execute = preparedStatement.execute();
// System.out.println(execute);
String sql = "SELECT id, name,geom,x,y, ST_DistanceSphere( " +
" geom, " +
" ST_GeometryFromText('POINT("+x+" "+ y+")')) distance " +
"FROM mylocation " +
"WHERE ST_DWithin( " +
" geom::geography, " +
" ST_GeomFromText('POINT("+x+""+ y+")', 4326)::geography, " +
" 1000 " +
") ORDER BY distance asc; " ;
long pre = System.currentTimeMillis();
PreparedStatement preparedStatement = c.prepareStatement(sql);
ResultSet resultSet = preparedStatement.executeQuery();
int i = 0;
while (resultSet.next()){
i ++ ;
System.out.println(resultSet.getInt(1)+" "+resultSet.getString(2)+" "+resultSet.getDouble(4)+" "+resultSet.getDouble(5));
}
long now = System.currentTimeMillis();
System.out.println("total size: " + i +"总耗时:" +(now-pre));
} catch (Exception e) {
e.printStackTrace();
System.err.println(e.getClass().getName()+": "+e.getMessage());
System.exit(0);
}
System.out.println("Opened database successfully");
}
代码库: https://github.com/luosai001/postgresql
cpu 内存 8g;
数据量 : 1078000 ;
查询1km以内的点
查询耗时 650毫秒
查询5km 以内的点
耗时 1.2s 左右
public static void main(String[] args) {
Connection c = null;
try {
Class.forName("org.postgresql.Driver");
c = DriverManager
.getConnection("jdbc:postgresql://192.168.1.106:5432/postgres",
"Admin", "");
//造数据
double x= 0.002;
double y = 0.002 ;
// StringBuffer buffer = new StringBuffer("");
// for (int i=50; i<100;i++){
// for (int j =1000;j<10000;j++){
// buffer.append("INSERT INTO mylocation (geom,name,x,y) VALUES ( ")
// .append(" ST_GeomFromText('POINT(")
// .append(""+(x+i*0.001))
// .append(" ")
// .append(""+(y+j*0.001))
// .append(")', 4326),'zhangsan',")
// .append(""+(x+i*0.001)+","+(y+j*0.001)+");");
// }
// }
// String sql = "INSERT INTO mylocation (geom,name,x,y) VALUES ( " +
// " ST_GeomFromText('POINT(? ?)', 4326),'zhangsan',?,? " +
// ");";
// PreparedStatement preparedStatement = c.prepareStatement(buffer.toString());
//
// boolean execute = preparedStatement.execute();
// System.out.println(execute);
String sql = "SELECT id, name,geom,x,y, ST_DistanceSphere( " +
" geom, " +
" ST_GeometryFromText('POINT("+x+" "+ y+")')) distance " +
"FROM mylocation " +
"WHERE ST_DWithin( " +
" geom::geography, " +
" ST_GeomFromText('POINT("+x+""+ y+")', 4326)::geography, " +
" 1000 " +
") ORDER BY distance asc; " ;
long pre = System.currentTimeMillis();
PreparedStatement preparedStatement = c.prepareStatement(sql);
ResultSet resultSet = preparedStatement.executeQuery();
int i = 0;
while (resultSet.next()){
i ++ ;
System.out.println(resultSet.getInt(1)+" "+resultSet.getString(2)+" "+resultSet.getDouble(4)+" "+resultSet.getDouble(5));
}
long now = System.currentTimeMillis();
System.out.println("total size: " + i +"总耗时:" +(now-pre));
} catch (Exception e) {
e.printStackTrace();
System.err.println(e.getClass().getName()+": "+e.getMessage());
System.exit(0);
}
System.out.println("Opened database successfully");
}
代码库: https://github.com/luosai001/postgresql
相关文章推荐
- postgresql 搜索指定距离内的记录 按近到远排序 并返回距离
- 关于返回 Array 的 Property的性能测试
- (原创)两年前写的一个关于六款WEB上传组件性能测试与比较
- 关于性能测试的讨论!
- 关于性能测试方法而引发的思考(一)
- 关于oracle数据库性能的测试~
- 关于视频播放性能测试
- 关于DB2的简单并行性能测试
- POSTGRESQL性能测试数据
- 关于OleDB\Oracle\SQLClient连接数据库的性能测试
- 关于视频播放性能测试
- 关于Web性能测试和CC攻击的几点思路
- 关于Response.Write一个提高性能的技巧测试
- 关于JAVA中线程同步的性能测试
- 关于在Java程序当中创建对象等基本操作的性能测试
- 关于视频播放性能测试
- 关于性能测试
- 关于泊松分布(系统性能测试并发用户估算理论)
- 关于字符串为空的几个性能测试
- 关于对sql2000查询结果进行相关度排序的测试