开发者社区> 问答> 正文

mysql数据库插入检测重复问题

一组很长的数据在向一个很大的表中做插入操作时,如何有效率地判断要插入的数值是否与数据库中已有的值重复了?假设这个表的字段比较多,只有一个id是unqiue的。

展开
收起
蛮大人123 2016-02-06 15:54:55 2860 0
1 条回答
写回答
取消 提交回答
  • 我说我不帅他们就打我,还说我虚伪

    可以使用hash.
    方案:
    假设该表有10个字段,1个是unique的主键,你可以在插入字段时将要比较重复的其他字段(这里我们假设是其他9个字段)连成字符串,取 hash 值,放进缓存(数据量比较小的话可以考虑 memcached, 比较大的话可以考虑 Redis),用 hash->id 存储。这样,在插入新数据的时候,只要把要比较的字段按照相同的方式连起来取 hash值,到缓存里找一下,就可以很快找到是否有相同的了,有的话,再取出 id,到数据库中取出整条数据。
    本方案的缺陷就是额外使用了缓存。如果没有条件的话,可以稍加改进。再建一个表,里面只有两个字段, hash 和 id,这个表专门用来做这个功能。想必比比较9个字段要快得多吧。

    $str = $f1 . $f2 . $f3 ... . $f9; // 如果有非字符串类型,安全起见可以考虑转一下类型
    $hash = md5($str);
    
    // 从 redis 或其他数据库中取出,如果为空,就保存,如果有,做其他操作
    $rs = $redis->get($hash);
    if(!$rs){
        // code for saving
        // 保存完别忘了把这条记录插入缓存
        $redis->set($hash, $id);
    }else{
        // return to frontend
    }
    2019-07-17 18:38:28
    赞同 展开评论 打赏
问答排行榜
最热
最新

相关电子书

更多
搭建电商项目架构连接MySQL 立即下载
搭建4层电商项目架构,实战连接MySQL 立即下载
PolarDB MySQL引擎重磅功能及产品能力盛大发布 立即下载

相关镜像