Mailinglisten-Archive |
westwing at gmx.de schrieb:
> Hallo,
>
> folgende Abfrage ist erstens viel zu langsam und zweitens müsste ich
> noch eine Anzahlabfrage einbauen
>
> SELECT
> user.*,
> user.username as title,
> user.ip_date as title3
> FROM user,stats,smsstats
> WHERE 1=1
> AND user.id=smsstats.id_user
> AND user.id=stats.id_user
> AND ( user.lastname LIKE '%Markus Schmidt%'
> OR user.firstname LIKE '%Markus Schmidt%'
> OR user.company LIKE '%Markus Schmidt%'
> OR user.username LIKE '%Markus Schmidt%' )
> GROUP BY user.id
> ORDER BY user.company,user.lastname,user.firstname
> LIMIT 0,30
>
> Der Sinn ist es über 3 Tabellen zu suchen. In der ersten sind Userdaten
> . In der zweiten und dritten sind Log Daten
>
> Nun wird die Abfrage sehr langsam
>
> In der USER sind ca. 500 Einträge
>
> In der STAT ca. 15000
> In der SMSSTAT ca. 5000
>
> Grade die letzten beiden werden massiv ansteigen.
>
> Wenn ich jetzt keinen Suchbegriff übergebe wird die Suche schon jetzt
> extrem langsam.
>
> Zusätzlich muss ich pro User in Tabelle 1 abfragen ob eine bestimmte
> Anzahl Einträge in STAT oder SMSSTAT vorhandne sind . Also eine Auswahl
> nach der Menge. Wie kann ich so was shcnell und performat erstellen ?
du brauchst Indizes auf stats.id_user und smsstats.id_user
auf user.id sollte ja eh ein PK liegen
erstelle einen Volltext-Index auf die Felder in denen du nach dem Namen
suchst
http://dev.mysql.com/doc/mysql/en/Fulltext_Search.html
SELECT user.*,
user.username AS title,
user.ip_date AS title3,
COUNT(stats.*) AS count_stats,
COUNT(smsstats.*) AS count_smsstats
FROM user
LEFT JOIN stats
ON user.id = stats.id_user
LEFT JOIN smsstats
ON user.id = smsstats.id_user
WHERE MATCH (user.lastname,
user.firstname,
user.company,
user.username)
AGAINST ('Markus Schmidt')
GROUP BY user.id
HAVING count_stats > 2
AND count_smsstats > 2
ORDER BY user.company,
user.lastname,
user.firstname
LIMIT 0,30
--
Sebastian Mendel
www.sebastianmendel.de www.warzonez.de www.tekkno4u.de www.nofetish.com
www.sf.net/projects/phpdatetime www.sf.net/projects/phptimesheet
--
Infos zur Mailingliste, zur Teilnahme und zum An- und Abmelden unter
-->> http://www.4t2.com/mysql
php::bar PHP Wiki - Listenarchive