我的数据库表(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 );


您还可以使用命名参数,这可能会使它缩短一些。

08-06 06:06