为了账号安全,请及时绑定邮箱和手机立即绑定

怎样实现,一次查询多个参数,分别判断是否都是唯一的

怎样实现,一次查询多个参数,分别判断是否都是唯一的

慕运维8079593 2019-01-19 14:09:03
1、实际需求:user表中,phone,username这两个字段都是唯一的,不能重复。批量插入之前需要分别判断这两个字段在数据库中是否已经存在。2、当前解决方案:使用or来实现 SELECT COUNT(*) FROM USER WHERE phone = #{phone} OR username = #{username} 3、问题:但是因为数据量比较大,效率很低,请问有什么更合适的解决方案,提供思路即可,谢谢。
查看完整描述

8 回答

?
开满天机

TA贡献1786条经验 获得超13个赞

数据量很大可以考虑分表。

优化方案,可以考虑分两次查询,第一个不重复才去检查另一个,同时给这两个字段加索引。

查看完整回答
反对 回复 2019-03-01
?
一只名叫tom的猫

TA贡献1906条经验 获得超3个赞

1、两个字段都有单独的唯一索引用union all查询判断结果不会慢的
2、利用mysql唯一索引的冲突异常,应用捕获异常也可以

查看完整回答
反对 回复 2019-03-01
?
莫回无

TA贡献1865条经验 获得超7个赞

我今天下午用mysql+navicat试了一下,100w条数据,
总共6组结果
1、无索引,union,平均0.7s
2、无索引,or,平均0.4s
3、两个唯一性索引,union,平均0.1s
4、两个唯一性索引,or,平均0.08
5、一个联合索引,union,平均0.4s
6、一个联合索引,or,平均0.4s

SELECT
    COUNT(*)
FROM
    (
        SELECT
            *
        FROM
            USER
        WHERE
            phone = "496066"
        UNION
            SELECT
                *
            FROM
                USER
            WHERE
                username = '888888'
    ) aa;


SELECT
    COUNT(*)
FROM
    USER
WHERE
    phone = '496066'
OR username = '888888';
查看完整回答
反对 回复 2019-03-01
?
30秒到达战场

TA贡献1828条经验 获得超6个赞

其实没必要count, limit 1就好,有则立即放回,没有第一个条件再查下一个

查看完整回答
反对 回复 2019-03-01
  • 8 回答
  • 0 关注
  • 994 浏览

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号