我試圖找到我的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'的順序以匹配您的查詢。 –
呀,你抓住我的錯字,我才。這是正確的代碼,而不是在帖子中。 –