gpt4 book ai didi

MySQL:使用插入和更新而不是插入重复键更新是否更快?

转载 作者:IT老高 更新时间:2023-10-29 00:16:17 26 4
gpt4 key购买 nike

我有一个更新数据库中大量行的 cron 作业。有些行是新的,因此插入,有些是现有行的更新,因此更新。

我在整个数据的重复键更新上使用插入并在一次调用中完成。

但是-我实际上知道哪些行是新的,哪些是更新的,所以我也可以分别进行插入和更新。

将插入和更新分开在性能方面有优势吗?这背后的机制是什么?

谢谢!

最佳答案

在我的测试中,使用 ON DUPLICATE KEY UPDATE 比使用 Insert/Update 平均慢 1.3 倍。这是我的测试:

插入/更新(54.07 秒)

    <?php 
$mtime = microtime();
$mtime = explode(" ",$mtime);
$mtime = $mtime[1] + $mtime[0];
$starttime = $mtime;
?>
<?php
set_time_limit(0);
$con = mysql_connect('localhost', 'root', '');
mysql_select_db('test');

for ($i = 1; $i <= 1000; $i = $i + 2)
{
mysql_query("
INSERT INTO users
VALUES(NULL, 'username{$i}', 'email.{$i}', 'password{$i}')
");
}

for ($i = 1; $i <= 1000; $i++)
{
if ($i % 2 == 0)
{
mysql_query("
INSERT INTO users
VALUES(NULL, 'username{$i}', 'email.{$i}', 'password{$i}')
");
}
else
{
mysql_query("
UPDATE users
SET (username = 'username{$i}', email = 'email{$i}', password = 'password{$i}')
");
}
}
?>
<?php
$mtime = microtime();
$mtime = explode(" ",$mtime);
$mtime = $mtime[1] + $mtime[0];
$endtime = $mtime;
$totaltime = ($endtime - $starttime);
echo "This page was created in ".$totaltime." seconds";
?>

重复 key 更新(70.4 秒)

<?php 
$mtime = microtime();
$mtime = explode(" ",$mtime);
$mtime = $mtime[1] + $mtime[0];
$starttime = $mtime;
?>
<?php
set_time_limit(0);
$con = mysql_connect('localhost', 'root', '');
mysql_select_db('test');

for ($i = 1; $i <= 1000; $i = $i + 2)
{
mysql_query("
INSERT INTO users
VALUES(NULL, 'username{$i}', 'email.{$i}', 'password{$i}')
");
}

for ($i = 1; $i <= 1000; $i++)
{
mysql_query("
INSERT INTO users
VALUES({$i}, 'username{$i}', 'email.{$i}', 'password{$i}')
ON DUPLICATE KEY UPDATE
username = 'username{$i}', email = 'email{$i}', password = 'password{$i}'
");
}
?>
<?php
$mtime = microtime();
$mtime = explode(" ",$mtime);
$mtime = $mtime[1] + $mtime[0];
$endtime = $mtime;
$totaltime = ($endtime - $starttime);
echo "This page was created in ".$totaltime." seconds";
?>

关于MySQL:使用插入和更新而不是插入重复键更新是否更快?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2495958/

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