gpt4 book ai didi

java - mysql数据库搜索文本真的很慢

转载 作者:行者123 更新时间:2023-11-29 08:20:58 24 4
gpt4 key购买 nike

我在 mySql 上有一个包含大约 300,000 条记录的表。其中一列是 VARCHAR,它包含一个链接(比方说 http://www.mysite.com/123012993 )

使用 Java,每次创建新记录时,我都需要知道它是否已经存在。确切的链接必须位于数据库中。如果是新的,则继续插入。否则,什么也不做。

所以我有以下内容:

String selectString = "Select count(link) from records_table where link = ?";
PreparedStatement ps = conn.prepareStatement(selectString);
ps.setString(1, "http://www.mysite.com/123012993");
ResultSet rsFinding = ps.executeQuery();

rsFinding.next();

if (t != 0) return false;
else { // do normal insert }

但是,搜索文本的查询非常慢,我们谈论的是大约 1 分钟。插入本身非常快。一切都在本地主机上运行。

这是搜索文本的正确方法吗?或者我应该索引数据库吗?

我正在考虑实现一个哈希键并缩小结果范围,但我认为对 300,000 条记录的查询应该不会太重。

谢谢

最佳答案

有几件事:

  • PreparedStatement 不应一次又一次地准备。准备并重复使用。
  • 您的 t 没有定义。
  • 让数据库来完成工作:我想每个数据库都有可能处理重复项。对于 MySql 有 INSERT ... ON DUPLICATE KEY UPDATE ...

所以使用这个命令

插入? INTO记录表ON DUPLICATE KEY UPDATE链接=链接

link = link 部分是一个无操作,使语法看起来适合 MySql 解析器。

还有INSERT IGNORE,它更容易使用(不需要无操作),但它忽略了更多问题,这很糟糕。

我忘了提及,您需要对 link 有一个唯一的键约束(主键是 UK 的特例,因此也可以)。

关于java - mysql数据库搜索文本真的很慢,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19414655/

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