gpt4 book ai didi

java - 使用 Hibernate 查找包含 100 万条记录的表

转载 作者:行者123 更新时间:2023-12-01 19:02:40 25 4
gpt4 key购买 nike

我的数据库表(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 位于复合 ID 列的值之间时,会获取记录,例如。

ip_from = 1; ip_to = 3 ; ip = 2;

因此上面的行将被返回

该表仅用于读取记录,请建议我一个比上面更高效的queryString

最佳答案

首先删除 hibernate 并在查询浏览器中运行查询,然后查看返回需要多长时间。如果花费相同的时间,则不是 hibernate 状态。这是数据库的性能。确保将索引添加到 ip_from 和 ip_to 两列上。您还可以对查询执行查询计划,以查看数据库在后台运行的内容,并尝试优化查询计划。

我建议不要像现在这样对查询使用串联。这会产生一个安全漏洞,允许来自外部各方的潜在 SQL 注入(inject)。最好使用以下内容:

Query q = session.createQuery("from Igeo igeo where igeo.from_ip >= ? and igeo.to_ip <= ?");
q.setString( 0, ip );
q.setString( 1, ip );

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

关于java - 使用 Hibernate 查找包含 100 万条记录的表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11632681/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com