鍍金池/ 問(wèn)答/Java  數(shù)據(jù)庫(kù)/ 怎樣實(shí)現(xiàn),一次查詢多個(gè)參數(shù),分別判斷是否都是唯一的

怎樣實(shí)現(xiàn),一次查詢多個(gè)參數(shù),分別判斷是否都是唯一的

1、實(shí)際需求:user表中,phone,username這兩個(gè)字段都是唯一的,不能重復(fù)。批量插入之前需要分別判斷這兩個(gè)字段在數(shù)據(jù)庫(kù)中是否已經(jīng)存在。
2、當(dāng)前解決方案:使用or來(lái)實(shí)現(xiàn)

SELECT
    COUNT(*)
FROM
    USER
WHERE
    phone = #{phone}
OR username = #{username}

3、問(wèn)題:但是因?yàn)閿?shù)據(jù)量比較大,效率很低,請(qǐng)問(wèn)有什么更合適的解決方案,提供思路即可,謝謝。

回答
編輯回答
巫婆

1、兩個(gè)字段都有單獨(dú)的唯一索引用union all查詢判斷結(jié)果不會(huì)慢的
2、利用mysql唯一索引的沖突異常,應(yīng)用捕獲異常也可以

2017年12月20日 23:02
編輯回答
帥到炸

其實(shí)沒(méi)必要count, limit 1就好,有則立即放回,沒(méi)有第一個(gè)條件再查下一個(gè)

2017年8月5日 19:36
編輯回答
獨(dú)白

前提:唯一索引
1、replace into 有,先刪除再插入;無(wú),直接插入。會(huì)有id間隙
2、insert ignore into 有,id空出來(lái);無(wú),插入。會(huì)有id間隙。
3、insert into on duplicate key update 有,則更新;無(wú),則插入。

第二種第三種都用過(guò),喜歡第三種,希望你也喜歡!

2018年6月16日 12:34
編輯回答
瘋浪

可以使用數(shù)據(jù)庫(kù)索引;為你不能重復(fù)的字段加唯一索引限制,插入的時(shí)候

2017年6月14日 10:58
編輯回答
神經(jīng)質(zhì)

可以直接用mysql的 insert on duplicate key 來(lái)解決

https://dev.mysql.com/doc/ref...

你可以選擇當(dāng)唯一索引重復(fù)時(shí),忽略插入或者刪除

INSERT [IGNORE] INTO USER (phone, username,xxxxx ) values (#{phone},#{username}, xxxxx) 
[ ON DUPLICATE KEY UPDATE xxxxx = #{xxxxx}]
2018年4月27日 11:03
編輯回答
汐顏

我今天下午用mysql+navicat試了一下,100w條數(shù)據(jù),
總共6組結(jié)果
1、無(wú)索引,union,平均0.7s
2、無(wú)索引,or,平均0.4s
3、兩個(gè)唯一性索引,union,平均0.1s
4、兩個(gè)唯一性索引,or,平均0.08
5、一個(gè)聯(lián)合索引,union,平均0.4s
6、一個(gè)聯(lián)合索引,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';
2018年5月31日 02:10
編輯回答
風(fēng)畔

數(shù)據(jù)量很大可以考慮分表。

優(yōu)化方案,可以考慮分兩次查詢,第一個(gè)不重復(fù)才去檢查另一個(gè),同時(shí)給這兩個(gè)字段加索引。

2017年8月28日 15:30
編輯回答
小曖昧

考慮用exists來(lái)優(yōu)化一下 另外增加phone和username聯(lián)合索引

2018年2月4日 07:21