php - 如何检查/更新包含约百万行的数据库中的列?

标签 php mysql sql performance pdo

我有一个包含大约一百万(1,000,000)行的 MYSQL 数据库,我想检查所有行并根据条件更新一些行,所以例如我运行这样的 SQL 语句:

select messageid from messages where messageid !=""

然后我获取所有 ID 并将它们存储在变量中:

$existMessages;

然后我生成一个 4 个字符的字符串 0-9a-z :

function generateRandomString($length = 4) {
    return substr(str_shuffle(str_repeat($y='0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ', ceil($length/strlen($y)) )),1,$length);
}

然后,在检查生成的 ID 是否唯一后,我使用生成的字符串更新现有 ID。

随着行数的增加,此过程会变得更慢并占用整个 CPU。

有更好的方法吗?喜欢直接在MYSQL中使用SQL语句吗?或者该怎么办?

最佳答案

您应该首先在您想要唯一的列上添加唯一或主要约束。

之后就可以执行更新命令

UPDATE TABLE_NAME SET COLMUN_NAME=generateRandomString() WHERE messageid !="";

关于php - 如何检查/更新包含约百万行的数据库中的列?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49720282/

相关文章:

sql - 行到列数据

php - PHP中的单个和多个数据过滤器

javascript - 带有 jQ​​uery 验证插件的新 reCaptcha

php - htaccess 重定向未按预期工作

java - 无法通过java执行创建表sql查询

php - sql + php 连接和爆炸

php - 如何在 POST 中发送多个复选框检查以从数据库中删除?

mysql - SQL-计算多个计数的百分比

mysql - 如何删除同一天重复的行?

sql - 有人可以对 SQL 查询进行版权保护吗?