Andreas Korthaus: wieder was zum Thema

Beitrag lesen

Hi!

Naja, ich bin nicht wirklich der große Datenbank-Optimierungs Experte ;-)

Nur fürs Verständnis, Du hast eine Tabelle mit viel Text in der Spalte "word". Jeder Datensatz verfügt über eine res_id (die nicht unique ist), wozu Du in zwei anderen Tabellen zusätzliche Informationen gespeichert hast. Jetzt hast Du also einen Suchbegriff ("irgendwas"), und willst jetzt diese zusätzlichen Informationen abfragen, die den Datensätzen mit der res_id zugeordent sind, wo der Suchbegriff "irgendwas" irgendwo im langen Text enthalten ist. War das grob richtig?

In dem Fall würde ich als erstes mal einen richtigen FULLTEXT Index nehmen, und nicht LIKE (alternativ alle Substrings der Wörter in einer indizierten Tabelel speichern, so ähnlich wie bei der neuen SELF-Suche von Daniela - AFAIK).

EXPLAIN SELECT DISTINCT a,b,c,.....

hm, muss das DISTINCT hier sein?
a,b,c bei GROUP BY?

FROM res, res_text,

Du solltest Dir vielleicht besser einen optimalen JOIN-Typ überlegen und angeben

(
SELECT res_words.res_id, res_words.rank
FROM words, res_words
(A)
WHERE word LIKE '%irgendwas%'

Todsünde ;-)
Warum keinen Volltext-Index?
Kannst Du auf die Subquery nicht verzichten?

(B)
AND words.id = res_words.word_id
) AS wort
WHERE server_id =1
(C)
AND res.id = res_text.res_id
(D) (woher kommt eigentlich (E)?)

hat vermutlich mit "Using temporary; " zu tun, oder?

AND res.id = wort.res_id
GROUP BY res.id
ORDER BY score DESC , id ASC

Ergebnis ist:

meine Bezeichnung|id|select_type|table|type|possible_keys|key|key_len|ref|rows|Extra

A|1|PRIMARY|<derived2>|ALL|NULL|NULL|NULL|NULL|35996|Using temporary; Using filesort

das ist schlecht! Er muss eine nichtmal so kleine temporäre Tabelle erstellen, wenn ich das richtig interpretiere, und kann entsprechend auch keinen Index verwenden.

D|2|DERIVED|words|All|PRIMARY|NULL|NULL|NULL|199878|Using where

auch nicht gut, das kommt vermutlich von LIKE %...%.

Wieso kannst Du nicht einfach einen FULLTEXT-Index auf "word" legen, diese Spalte abfragen, und dann per LEFT JOINs anhand von res_id den zugehörigen Rest auslesen?

Wenn das nicht geht, würde ich mir überlegen eine HEAP-Tabelle mit passenden Daten als Index zu erstellen.

Grüße
Andreas

--
SELFHTML Linkverzeichnis: http://aktuell.de.selfhtml.org/links/
0 46

Tutorial zu FCGI gesucht

Reiner
  • cgi
  1. 1
    Andreas Korthaus
    1. 0
      Reiner
      1. 1
        Andreas Korthaus
        1. 0
          Reiner
          1. 1
            Andreas Korthaus
            1. 0
              Reiner
              1. 1
                Andreas Korthaus
                1. 0

                  Super!

                  Reiner
                  1. 0
                    Andreas Korthaus
                    1. 0
                      Reiner
                      1. 1
                        Andreas Korthaus
                        1. 0
                          Reiner
                          1. 1
                            Andreas Korthaus
                            1. 0
                              Reiner
                              1. 1

                                lighttpd

                                Andreas Korthaus
                                • webserver
                                1. 0
                                  Reiner
                                  1. 1
                                    Andreas Korthaus
                                    1. 0
                                      Reiner
                                      1. 0
                                        Andreas Korthaus
                                        1. 0
                                          Reiner
                                          1. 0
                                            Andreas Korthaus
                                          2. 0

                                            PHP/MySQL optimieren / Caching

                                            Andreas Korthaus
                                            1. 0
                                              Anonymous
                                              1. 0
                                                Reiner
                                                1. 0
                                                  Anonymous
                                                2. 0
                                                  Andreas Korthaus
                                                  1. 0
                                                    Anonymous
                                                    1. 0
                                                      Reiner
                                                      1. 0
                                                        Anonymous
                                                        1. 0
                                                          Andreas Korthaus
                                                          1. 0

                                                            wieder was zum Thema

                                                            Reiner
                                                            1. 0
                                                              Reiner
                                                              1. 0
                                                                Reiner
                                                              2. 0
                                                                Andreas Korthaus
                                                                1. 0
                                                                  Reiner
                                                                  1. 0
                                                                    Anonymous
                                                                    1. 0
                                                                      Reiner
                                                                      1. 0
                                                                        Anonymous
                                                                        1. 0
                                                                          Reiner
                                              2. 0
                                                Andreas Korthaus
                                                1. 0
                                                  Anonymous
                2. 0
                  Christoph Zurnieden
  2. 1
    Christoph Zurnieden
  3. 0
    Andreas Korthaus
  4. 0

    SQL-Abfragen/JOINs optimieren, Volltextsuche

    Andreas Korthaus
    • datenbank