MySQLデータチェック重い、重い実装文


テーブルuserが一つあります。フィールドはそれぞれid、nik_があります。name、password、email、phone。
一、シングルフィールド(nik_)name
重複記録があるすべての記録を検出します。

select * from user where nick_name in (select nick_name from user group by nick_name having count(nick_name)>1);
重複記録がある各記録グループの中でidが一番大きい記録を検出しました。

select * from user where id in (select max(id) from user group by nick_name having count(nick_name)>1);
余分な記録を検出し、idの最小記録を検出しない

select * from user where nick_name in (select nick_name from user group by nick_name having count(nick_name)>1) and id not in (select min(id) from user group by nick_name having count(nick_name)>1);
余分な重複記録を削除して、idの最小記録だけを残します。

delete from user where nick_name in (select nick_name from (select nick_name from user group by nick_name having count(nick_name)>1) as tmp1) and id not in (select id from (select min(id) from user group by nick_name having count(nick_name)>1) as tmp2);
二、マルチフィールドname、password)
重複記録があるすべての記録を検出します。

select * from user where (nick_name,password) in (select nick_name,password from user group by nick_name,password where having count(nick_name)>1);
 
重複記録がある各記録グループの中でidが一番大きい記録を検出しました。

select * from user where id in (select max(id) from user group by nick_name,password where having count(nick_name)>1);
各重複記録グループの中の余分な記録データを検出して、idの最小の一つを検出しません。

select * from user where (nick_name,password) in (select nick_name,password from user group by nick_name,password having count(nick_name)>1) and id not in (select min(id) from user group by nick_name,password having count(nick_name)>1);
余分な重複記録を削除して、idの最小記録だけを残します。

delete from user where (nick_name,password) in (select nick_name,password from (select nick_name,password from user group by nick_name,password having count(nick_name)>1) as tmp1) and id not in (select id from (select min(id) id from user group by nick_name,password having count(nick_name)>1) as tmp2);
以上がMySQLデータ検索の重さ、重さを下げる実現文の詳細です。MySQLデータについての検索の重さ、重さに関する資料は他の関連記事に注目してください。