以下は、 CSVファイルとクライアントIDフィールドを入力として使用して、MySQLデータベースからユーザーを追加または無効にするより大きなPHPスクリプトの一部です。
関連するテーブルには、usersとusers_clientsの2つがあります。後者は、ユーザーが複数のクライアントに属することができるため、ユーザーとクライアント間の関係を維持します。
これがテーブルの構造です
ユーザー構造(より多くのフィールドがあります)
id | int(11) (primary key)
user | varchar(100)
pass | varchar(100)
category | int(11)
date | timestamp
name | varchar(100)
email | varchar(255)
ユーザーインデックス
SEARCH | user | FULLTEXT
SEARCH | name | FULLTEXT
SEARCH | email | FULLTEXT
users_clients構造
id_user | int(11)
id_client | int(11)
status | enum('active','inactive')
これは、CSVファイルから各ユーザーを追加するためのスクリプトの基本的なフローです。
そのクライアントのユーザーが存在するかどうかを確認します。
SELECT LOWER(user) FROM users u INNER JOIN users_clients uc ON u.id = uc.id_user WHERE u.user = '$user' and uc.id_client = $id_client
存在しない場合は、データベースに追加してください。
INSERT INTO users ($fields,id_client) VALUES ($values,'$id_operation')
挿入されたユーザーのIDを取得します。ここでmysql_insert_idのようなものを使用できることは知っていますが、競合状態についてはどうでしょうか。
SELECT u.id as id FROM users u WHERE u.user = '$user' and u.id_client = '$id_operation'
ユーザーを対応するクライアントに関連付けます。
INSERT INTO users_clients (id_user, id_client) VALUES ('$id_user','$id_client')
現在、テーブルには400.000人のユーザーがいます。このスクリプトは、500ユーザーのCVSを処理するのに10分以上かかります。
これをどのように改善して、より速くしますか?
前もって感謝します。
PD:完全な機能を見たい場合は、pastebinで入手できます。