我的数据库表(geo ip查找)有7列,其中2列构成。
现在,当我使用前2个栏目查找值时,需要12-14秒才能获取记录。
我的DAO代码如下所示:
String queryString = "from Igeo igeo where igeo.ip_from <= " + ip
+ "and igeo.ip_to >= " + ip;
Query q = session.createQuery(queryString);
List<Igeo> igeoList = q.list();
if(igeoList.size() > 0){
Igeo igeo = igeoList.get(0);
ISP = igeo.getIsp();
...
...
}
* Igeo = Java表示表中的类
**当ip位于Composite-id列的值之间时,获取记录。
ip_from = 1; ip_to = 3; ip = 2;
所以上面的行将被返回
该表仅用于读取记录,请向我建议一个比上面更有效的queryString
最佳答案
首先删除休眠模式,然后在查询浏览器中运行查询,然后查看返回需要多长时间。如果花费相同的时间,则不是休眠。这是数据库的性能。确保将索引添加到ip_from和ip_to两列上。您还可以对查询执行查询计划,以查看数据库正在运行的内容,并尝试优化查询计划。
我建议不要按原样对查询使用串联。这就产生了一个安全漏洞,允许从外部潜在的SQL注入。最好使用以下命令:
Query q = session.createQuery("from Igeo igeo where igeo.from_ip >= ? and igeo.to_ip <= ?");
q.setString( 0, ip );
q.setString( 1, ip );
您还可以使用命名参数,这可能会使它缩短一些。