PHP往Mysql里插入唯一随机字符串的效率问题

发布于 2022-09-07 15:51:24 字数 641 浏览 41 评论 0

  1. 有一验证码数据表,有200万条数据,验证码字段需要唯一
  2. 需要往这个表里插入大批量的数据,每次插入几万条左右数据
  3. 如何优化每次的执行时间

现在的做法:

  1. 先生成好包含唯一验证码的数组。
  2. 根据数组去验证码表里查,发现存在的 重新生成
  3. 5000 一次 分批插入
private function generateUniqueValidationCodes(int $number)
{
    // 生成指定数量的不重复的验证码
    $codeArr = $this->generateUniqueCodes($number);
    // 去表中查询是否有存在的
    $result = ValidationCode::query()->whereIn('validation_code', $codeArr)->get();
    // 如果有存在的重新生成
    if ($result->isNotEmpty()) {
        $this->generateUniqueValidationCodes($number);
    } else {
        return $codeArr;
    }
}

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(4

灵芸 2022-09-14 15:51:24

代码有小错误

$this->generateUniqueValidationCodes($number);

这里还得加上return
验证码字段需要唯一,好奇这个为什么要唯一?
唯一的话,你加上Unique Index好了

风铃鹿 2022-09-14 15:51:24

同意楼上的观点,不必要每次插入前查询 有没有重复,直接加个unique索引,只要执行你想要的次数就行了;
然后执行成功说明不重复,如果失败再重新调用一次就可以了。这样省去了每次需要查询的时间,效率会提高很多

毅然前行 2022-09-14 15:51:24

代码里有return的,没写完,另外数据表里也加有唯一的索引的,需要唯一是业务需要;我想请教的是还有其他优化方法没?

吻安 2022-09-14 15:51:24

首先,既然需要唯一,那么就加唯一索引就能解决,然后失败再递归执行。而且验证码既然是你自己定义的,那么生成规则也在你手上,你应该从验证码的生成规则上进行区分,这样基本保证了唯一性,没必要考虑太多,简单问题简单处理就好。

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文