我试图找到我的users
表副本(不要问,它的很多繁琐的),但我在创造我所创建的查询索引的问题。该表看起来像:查找重复行的索引?
+----------------+---------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+----------------+---------+------+-----+---------+----------------+
| id | int(10) | NO | PRI | NULL | auto_increment |
| email | text | YES | MUL | NULL | |
| username | text | YES | MUL | NULL | |
| password | text | YES | | NULL | |
+----------------+---------+------+-----+---------+----------------+
还有其他领域,但这些是我正在寻找的。我写了寻找重复的查询是这样的:
SELECT COUNT(username) count,GROUP_CONCAT(id) ids,username,email,password
FROM users
GROUP BY username,email,password
HAVING COUNT(username) > 1
我创建的索引是:
CREATE INDEX users_id_username_password_email
ON users id,username(64),password(64),email(64));
不幸的是,形容似乎并不使用这个指数:
mysql> describe SELECT COUNT(username) count,GROUP_CONCAT(id) ids,
-> username,email,password
-> FROM users
-> GROUP BY username,email,password
-> HAVING COUNT(username) > 1\G
*************************** 1. row ***************************
id: 1
select_type: SIMPLE
table: users
type: ALL
possible_keys: NULL
key: NULL
key_len: NULL
ref: NULL
rows: 705418
Extra: Using filesort
所以根本的问题是,我应该创建找桌子上的重复条目,如本什么样的指标?
编辑:更改查询以匹配指数什么也没做:
mysql> describe SELECT COUNT(username) count,GROUP_CONCAT(id) ids,
-> username,password,email
-> FROM users
-> GROUP BY username,password,email
-> HAVING COUNT(username) > 1\G
*************************** 1. row ***************************
id: 1
select_type: SIMPLE
table: users
type: ALL
possible_keys: NULL
key: NULL
key_len: NULL
ref: NULL
rows: 705418
Extra: Using filesort
如果您正在寻找重复的,那么应该不是查询的最后一点是:'HAVING COUNT(用户名)> 1'呢?至于索引,它可能无所谓,因为像这样的查询,没有WHERE子句,最终必须扫描整个表。 –
尝试交换'password'和'email'的顺序以匹配您的查询。 –
呀,你抓住我的错字,我才。这是正确的代码,而不是在帖子中。 –