挿入選択を呼び出したいのですが、この選択を使用しようとしています ( 1 つの列が一意の場合、この INSERT SELECT クエリの助けを借りて)
SELECT minids.userid, username, password, full_name, country, email,
(select openclipart_files.id from aiki_users, openclipart_files
where aiki_users.userid = users.userid and avatar like '%svg' AND
filename = avatar) as avatar,
homepage, usergroup, notify, nsfwfilter
FROM aiki_users users
INNER JOIN (SELECT MIN(userid) as userid FROM aiki_users GROUP by username)
minids ON minids.userid = users.userid;
インサートで使ってます
INSERT INTO openclipart_users(id, user_name, password, full_name, country,
email, avatar, homepage, user_group, notify, nsfw_filter) SELECT ...
実行に非常に時間がかかります(数分後にキャンセルします)
aiki_users テーブルには 100k 行があり、openclipart_files には 30k 行があります。基本的に、重複をスキップして aiki_users から openclipart_users にすべてのものをコピーし、アバターをファイルの ID にしたいのですが、古いテーブルでは文字列です (約 300 人のユーザーのみが約 1k の svg アバターを持っています)。ユーザーは '' アバターを持っていませんが、私は何のsvgしか持っていません)。
そのアバターを openclipart_users にすばやく挿入する方法はありますか (数秒で INSERT SELECT を実行する必要はありません)。
Explain over SELECT のEDIT出力
+----+--------------------+-------------------+--- ---+---------------+----------+---------+------- ---------------------------+--------------------+------------- + | | ID | select_type | テーブル | タイプ | 可能な_キー | キー | key_len | 参照 | 行 | 行 エクストラ | +----+--------------------+-------------------+--- ---+---------------+----------+---------+------- ---------------------------+--------------------+------------- + | | 1 | プライマリ | <派生3> | すべて | ヌル | ヌル | ヌル | ヌル | 106689 | | | | | 1 | プライマリ | ユーザー | eq_ref | プライマリ | プライマリ | 4 | minids.userid | 1 | | | | | 3 | 派生 | aiki_users | インデックス | ヌル | ユーザー名 | 302 | ヌル | 111273 | インデックスの使用 | | | 2 | 従属サブクエリ | openclipart_files | すべて | ヌル | ヌル | ヌル | ヌル | 37715 | | | | | 2 | 従属サブクエリ | aiki_users | eq_ref | プライマリ | プライマリ | 4 | openclipart_staging.users.userid | 1 | where | の使用 +----+--------------------+-------------------+--- ---+---------------+----------+---------+------- ---------------------------+--------------------+------------- +