Mailinglisten-Archive |
hej, >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 performance-nachteile: a) user.* sollte möglichst vermieden werden, da das parsen auf mysql-server-seite länger dauert wie wenn du alle spalten angeben würdest. b) gewichtiger ist jedoch, daß der index nicht benutzt werden kann, weil du mit LIKE %wert% arbeitest, somit *muss* der gesamte datenbestand geprüft werden, was kostet. c) index prüfen mit EXPLAIN d) mir scheint das ERD nicht ausgereift bzw. ich verstehe nicht, wie man im feld firstname mit einem vollen vor - und nachnamen als like_phrase sucht. ebenso bei lastname oder gar username. von aussen betrachtet, macht das so keinen sinn. es könnte sinniger sein, weitere tabellen mit in der ERD einzubeziehen, wo diese daten normalisiert sind und man dann besser mit suchabfragen arbeiten und den index miteinbeziehen könnte. andererseits kann die suchphrase im frontend auch gesplittet und dann mit einem wert%-like gearbeitet werden. zuguterletzt empfehle ich dir folgende syntax-verbesserung ;-) SELECT u.wert1, u.wert.2, u.username AS title, u.ip_date AS title3 FROM user AS u, stats AS s,smsstats AS smss WHERE 1=1 AND u.id=smss.id_user AND u.id=s.id_user AND ( u.lastname LIKE '%Markus Schmidt%' OR u.firstname LIKE '%Markus Schmidt%' OR u.company LIKE '%Markus Schmidt%' OR u.username LIKE '%Markus Schmidt%' ) GROUP BY u.id ORDER BY u.company, u.lastname, u.firstname LIMIT 0,30 bei performance-fragen empfiehlt sich immer ales erstes: - SHOW INDEX FROM tbl - EXPLAIN SELECT ... dann wirst du sehen, wo der schuh stecken bleibt und das, in diesem fall, da der gesamte datenbestand mehrfach durchenudelt werden muss. henry -- "Sie haben neue Mails!" - Die GMX Toolbar informiert Sie beim Surfen! Jetzt aktivieren unter http://www.gmx.net/info -- Infos zur Mailingliste, zur Teilnahme und zum An- und Abmelden unter -->> http://www.4t2.com/mysql
php::bar PHP Wiki - Listenarchive