php.de

Zurück   php.de > Webentwicklung > Datenbanken

Datenbanken SQL und Co

Antwort
 
LinkBack Themen-Optionen Thema bewerten
Alt 30.11.2011, 21:04  
Neuer Benutzer
 
Registriert seit: 01.05.2011
Beiträge: 2
PHP-Kenntnisse:
Anfänger
herlos befindet sich auf einem aufstrebenden Ast
Standard Tabellenübergreifende Abfrage in Kombination mit MATCH AGAINST sehr langsam!!

Hallo,
ich habe folgende SQL-Abfrage, um eine Veranstaltung nach Stichwörtern zu durchsuchen. Ich durchsuche das Feld "description", sowie eine eigene Tabelle "tags", in der die Tags gespeichert sind. Die Beziehungen zwischen Tags und Events sind in "events_tags_rels" gespeichert:
PHP-Code:
SELECT events.id FROM events,tags t,events_tags_rels etr WHERE ((t.tag LIKE '%Weihnacht%' AND etr.tag_id t.id AND etr.event_id events.id) OR MATCH(descriptionAGAINST ('Weihnacht')) GROUP BY events.id 
Diese Abfrage dauert EWIG lang .. führe ich nur eines der beiden durch, geht es ultra schnell .. also etwa:
PHP-Code:
SELECT events.id FROM events,tags t,events_tags_rels etr WHERE ((t.tag LIKE '%Weihnacht%' AND etr.tag_id t.id AND etr.event_id events.id)) GROUP BY events.id 
oder eben
PHP-Code:
SELECT events.id FROM events,tags t,events_tags_rels etr WHERE MATCH(descriptionAGAINST ('Weihnacht')) GROUP BY events.id 
Kann mir jemand helfen? Ich bin am verzweifeln

Vielen Dank schonmal!

Johannes
herlos ist offline   Mit Zitat antworten
Sponsor Mitteilung
PHP Code Flüsterer

Registriert seit: 21.08.2005
Beiträge: 4682
PHP-Kenntnisse:
Fortgeschritten

Alt 30.11.2011, 21:20  
moderatives Dielektrikum
 
Benutzerbild von nikosch
 
Registriert seit: 21.05.2008
Beiträge: 35.987
PHP-Kenntnisse:
Fortgeschritten
nikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunftnikosch hat eine strahlende Zukunft
Standard

Die Logik scheint auch falsch zu sein. Benutze die „echte“ JOIN-Syntax und trenne Ausschlussbedingung von JOIN-Bedingung.
__________________
--
One pixel is still too big. Please make it smaller. ASAP.

Initiative Mittelstand.
Die wichtigste Gestaltungsregel im Screendesign ist Pi mal Daumen des Arbeitgebers.
--
nikosch ist offline   Mit Zitat antworten
Alt 01.12.2011, 02:11  
Erfahrener Benutzer
 
Benutzerbild von lstegelitz
 
Registriert seit: 07.09.2009
Beiträge: 4.005
PHP-Kenntnisse:
Fortgeschritten
lstegelitz ist einfach richtig nettlstegelitz ist einfach richtig nettlstegelitz ist einfach richtig nettlstegelitz ist einfach richtig nett
Standard

Der Mix von LIKE und MATCH .. AGAINST ist übel.

Erst mal: Die beiden Vergleiche funktionieren komplett unterschiedlich.

LIKE '%...%' führt einen full table scan über die gesamte Datenmenge durch und liefert nur die Datensätze, in denen Treffer erzielt wurden. Bei steigender Datenmenge schlägt sich diese Art der Suche sehr negativ auf die Performance aus. Ein eventueller Index kann nicht verwendet werden.

MATCH .. AGAINST wiederum kann zwar auf einen Volltextindex bauen wenn es einen gibt, liefert aber ALLE Datensätze zurück und versieht jeden mit einem Relevanz-Wert. Zur Krönung wird das ganzen noch sortiert.

Dazu kommt dann noch der Knackpunkt der Datenmenge. Übersteigt diese einen gewissen Wert (und bei Kreuzprodukten passiert das sehr schnell), kann MySQL die Daten zum sortieren nicht mehr im Arbeitsspeicher halten und schwenkt auf filesort.

Mich würde der EXPLAIN von der kompletten Query interessieren... und die Datenmengen der Tabellen.
__________________
Über 90% aller Gewaltverbrechen passieren innerhalb von 24 Stunden nach dem Konsum von Brot.
lstegelitz ist offline   Mit Zitat antworten
Antwort


Themen-Optionen
Thema bewerten
Thema bewerten:

Forumregeln
Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are an
Gehe zu

Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
[Erledigt] Frage zu Volltexte-Suche MATCH / AGAINST geneticZ Datenbanken 4 28.11.2011 14:47
[Erledigt] Problem mit Querry ....MATCH .. AGAINST konfusius Datenbanken 7 05.11.2011 00:31
MATCH AGAINST Abfrage Problem mathias_vie Datenbanken 3 26.11.2010 16:19
Abfrage mit LIKE und Abfrage mit MATCH??? bench78 PHP Tipps 2010 20 28.04.2010 23:05
Mysql - Distinct mit order by Abfrage - extrem langsam razorhunter Datenbanken 12 05.01.2010 14:50
MySQL Abfrage mit PHP extrem langsam kip Datenbanken 6 24.08.2009 11:11
[Erledigt] Problem Mysql Suche Match Against | Group By litterauspirna Datenbanken 4 26.01.2009 19:59
SQL Abfrage ohne DESC langsam Thisi Datenbanken 5 07.01.2009 09:53
Einzeltreffer von MATCH ... AGAINST ... ermitteln proud Datenbanken 3 09.05.2008 08:31
match, against: ergebnisse filtern DarkThunder Datenbanken 4 30.03.2007 10:51
MATCH .... AGAINST ... Problem Denise Datenbanken 4 21.03.2007 20:05
MySQL Abfrage macht Seite langsam Datenbanken 11 19.10.2006 19:38
Match ... Against... einzeln oder gesammten string? EvilDragon Datenbanken 2 06.02.2006 14:49
match .. against Mutatos Datenbanken 1 29.03.2005 16:42
MySQL Match Against Problem RcRaCk2k PHP-Fortgeschrittene 1 15.03.2005 12:22

Besucher kamen über folgende Suchanfragen bei Google auf diese Seite
match against mit like kombinieren, datenbank php abfrage übergreifend, mysql suche nach stichwörtern, mysql datenbank tabellenübergreifend nach string suchen, php abfrage kombinationen, sql tabellenübergreifende abfrage, datenbank nach stichwörtern durchsuchen, mysql match against sehr langsam, mysql match langsam join, sql match against tabellenübergreifend, mysql match against tag_id, sql 2005 tabellenübergreifende abfrage, mysql match against extrem langsam, php mysql match kombinieren, php mysql tabellenübergreifende abfrage

Alle Zeitangaben in WEZ +2. Es ist jetzt 15:55 Uhr.




Powered by vBulletin® Version 3.7.2 (Deutsch)
Copyright ©2000 - 2012, Jelsoft Enterprises Ltd.
Search Engine Optimization by vBSEO 3.2.0
Aprilia-Forum, Aquaristik-Forum, Liebeskummer-Forum, Zierfisch-Forum, Geizkragen-Forum