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