Ich verwalte eine Immobilien-Website. Ich habe eine Tabelle mit gesperrten Benutzern (kleine Tabelle) und eine Tabelle namens advert_views, die jeden Eintrag verfolgt, den jeder Benutzer sieht (derzeit 1,3 Millionen Zeilen und wachsend). Die Tabelle advert_views berücksichtigt die IP-Adresse jeder angezeigten Anzeige.Abfrage einer großen Tabelle mit mysql
Ich möchte die von den gesperrten Benutzern verwendeten IP-Adressen abrufen und überprüfen, ob einer dieser gesperrten Benutzer neue Konten eröffnet hat. Ich lief die folgende Abfrage:
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
ich einen Index für die advert_views Tabelle angelegt und die Benutzer-Tabelle nach unten:
Meine Abfrage dauert eine halbe Stunde auszuführen. Gibt es eine Möglichkeit, meine Abfragegeschwindigkeit zu verbessern?
Danke! Chris
Bitte zeigen Sie den Abfrageplan –
IP-Adressen sind eine ziemlich gefährliche Möglichkeit, dies zu tun. Viele IP-Adressen werden von vielen verschiedenen Personen gemeinsam genutzt. –
Sollten Sie ein Zeitlimit für die Wiederverwendung der IP-Adresse verwenden? Benutzer können eine neue IP-Adresse anfordern. Dies ist eine gängige Methode, um Verbotsversuche zu vermeiden. Was nützlicher ist, ist eine umgekehrte Suche ihrer aktuellen IP-Adresse. Möglicherweise stellen Sie fest, dass der Hosting-Service auf dieselbe Kundennummer verweist.Meins tut; - /. Wenn eine der anonymen Methoden verwendet wird, ist diese Methode natürlich nutzlos. –