gpt4 book ai didi

mysql - 检查 MySQL 表中是否已存在 URL 的最快方法是什么?

转载 作者:行者123 更新时间:2023-11-29 14:38:52 25 4
gpt4 key购买 nike

我有一个varchar(255)我在 MySQL 数据库中存储 URL 的列。该列有一个唯一的索引。

当我的爬虫遇到某个 URL 时,它必须检查数据库以查看该 URL 是否已存在。如果存在,爬网程序会选择有关该条目的数据。如果不存在,爬虫会添加该 url。我目前使用以下代码执行此操作:

$sql = "SELECT id, junk
FROM files
WHERE url = '$url'";
$results = $this->mysqli->query( $sql );

// the file already exists in the system
if( $results->num_rows > 0 )
{
// store data to variables
}

// the file does not exists yet... add it
else
{

// insert new file
$sql = "INSERT INTO files( url )
VALUES( '$url' )";
$results = $this->mysqli->query( $sql );

}

我意识到有很多方法可以做到这一点。我读到使用 MySQL if/else 语句可以加快速度。有人能解释一下 MySQL 如何以不同的方式处理这个问题,以及为什么它可能会更快吗?我还应该测试其他替代方案吗?我的爬虫正在执行大量这样的检查,加快此过程可能会显着提高我的系统速度。

最佳答案

首先,URL 将会比 varchar(256) 长得多。

其次,因为它们太长了,您不想进行字符串比较,所以随着表的增长,它会变得非常慢。相反,创建一个具有哈希值的列并进行比较。

当然,您应该为哈希列建立索引。

对于实际插入,另一种方法是对哈希施加唯一约束。然后盲目地进行插入,让 SQL 拒绝欺骗。 (但是您必须将异常处理程序放入代码中,这有其自身的开销。)

关于mysql - 检查 MySQL 表中是否已存在 URL 的最快方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8409404/

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