1、实际需求:user表中,phone,username这两个字段都是唯一的,不能重复。批量插入之前需要分别判断这两个字段在数据库中是否已经存在。2、当前解决方案:使用or来实现
SELECT
COUNT(*)
FROM
USER
WHERE
phone = #{phone}
OR username = #{username}
3、问题:但是因为数据量比较大,效率很低,请问有什么更合适的解决方案,提供思路即可,谢谢。
8 回答
莫回无
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';
添加回答
举报
0/150
提交
取消
