私はプロパティのWebサイトを管理しています。私は禁止されたユーザー(小さなテーブル)と各ユーザーが表示する各リストを追跡するadvert_viewsと呼ばれるテーブルを持っています(現在1.3mラインと成長)。 advert_viewsテーブルalsioは、表示されたすべての広告のIPアドレスを記録します)。mysqlを使用して大きなテーブルをクエリする
禁止されたユーザーが使用しているIPアドレスを取得し、禁止されたユーザーのいずれかが新しいアカウントを開いたかどうかを確認します。
SELECT adviews.user_id AS 'banned user_id',
adviews.client_ip AS 'IPs used by banned users',
adviews2.user_id AS 'banned users that opened a new account'
FROM banned_users
LEFT JOIN users on users.email_address = banned_users.email_address #since I don't store the user_id in banned_users
LEFT JOIN advert_views adviews ON adviews.user_id = users.id AND adviews.user_id IS NOT NULL # users may view listings when not logged in but they have restricted access to the information on the listing
LEFT JOIN (SELECT client_ip,
user_id
FROM advert_views
WHERE user_id IS NOT NULL
) adviews2
ON adviews2.client_ip = adviews.client_ip
WHERE banned_users.rec_status = 1 and adviews.user_id <> adviews2.user_id
GROUP BY adviews2.user_id
私は以下のとおりadvert_viewsテーブル上のインデックスとユーザーテーブルを適用:私は、次のクエリを実行した
私のクエリを実行する時間半かかります。クエリ速度を改善する方法はありますか?
ありがとうございます! Chris
クエリプラン –
を表示してください。これを行うには、IPアドレスがかなり危険です。多くのIPアドレスは多くの異なる人々の間で共有されています。 –
IPアドレスを再利用するために期限を設けてください。人々は新しいIPアドレスを要求することができ、これは一般的な禁止方法の回避方法です。より有用なのは、現在のIPアドレスの逆引きです。ホスティングサービスが同じ顧客IDを指していることがわかります。私はそうする; - /。明らかに、匿名メソッドのいずれかが使用されている場合、このメソッドは役に立たない。 –