Schrift
Wiki:Tipp zum Debugging: use Data::Dumper; local $Data::Dumper::Useqq = 1; print Dumper \@var;
[thread]3718[/thread]

MySQL: Grosse Tabelle: FULLTEXT oder nicht



<< >> 8 Einträge, 1 Seite
esskar
 2006-09-15 10:48
#34669 #34669
User since
2003-08-04
7321 Artikel
ModeratorIn

user image
Hi,

wir haben hier eine MyISAM Tabelle mit ca. 160000 Einträgen.
Datenlänge: 64,8 MB
Indexlänge: 82,9 MB
Diese hat auf einer Spalte einen FULLTEXT Index.
Momentan gibt es eine "WHERE MATCH (foo) AGAINST (bar)" Anfrage, um Daten zu suchen. Ich hab jetzt auf MySQL.com gelesen (http://dev.mysql.com/doc/refman/5.1/de/fulltext-search.html), dass "Bei größeren Datenmengen erfolgt das Laden Ihrer Daten in eine Tabelle ohne FULLTEXT-Index und das nachfolgende Erstellen des Indexes wesentlich schneller als das Einladen in eine Tabelle mit vorhandenem FULLTEXT-Index". Einfügen war klar; lesen hätte ich nicht gedacht.

Nun meine Frage: meint ihr, man wäre schneller, wenn man den FULTEXT Index raus wirft und dafür eine LIKE Suche macht?

Wie sind so eure Erfahrungen?
Dubu
 2006-09-15 12:10
#34670 #34670
User since
2003-08-04
2145 Artikel
ModeratorIn + EditorIn

user image
[quote=esskar,15.09.2006, 08:48]Einfügen war klar; lesen hätte ich nicht gedacht.
[/quote]
Da steht nichts von lesen - oder was habe ich übersehen?

Quote
Nun meine Frage: meint ihr, man wäre schneller, wenn man den FULTEXT Index raus wirft und dafür eine LIKE Suche macht?

Beim Schreiben ja, beim Suchen nein. Wenn kein Vollindex vorhanden ist, muss jeder Eintrag auf einen Match durchsucht werden, das dauert zumindest bei großen Datenmengen prinzipiell länger. Allerdings sind schlappe 64 MB Daten so oder so schnell durchsucht.

Quote
Wie sind so eure Erfahrungen?

Keine persönlichen.
pq
 2006-09-15 12:14
#34671 #34671
User since
2003-08-04
12209 Artikel
Admin1
[Homepage]
user image
ich verstehe jetzt das problem nicht; könnte sein, dass du den satz falsch verstehst.
wenn du eine volltextsuche machen willst, nimmst du natürlich volltext.
die suche ist ja auch schneller als mit LIKE.
alles, was dieser absatz sagt, ist, dass es lange dauert, wenn du größere
mengen in die tabelle *einliest* (nicht von der tabelle liest). in dem
fall ist es günstiger, den index abzuschalten und nachträglich hinzuzufügen.
im übrigen sind 160.000 einträge IMHO nicht so viel. unsere haupt-datenbank
hat ca. 1 mio einträge und 500-600MB.
Always code as if the guy who ends up maintaining your code will be a violent psychopath who knows where you live. -- Damian Conway in "Perl Best Practices"
lesen: Wiki:Wie frage ich & perlintro Wiki:brian's Leitfaden für jedes Perl-Problem
esskar
 2006-09-15 12:18
#34672 #34672
User since
2003-08-04
7321 Artikel
ModeratorIn

user image
ups; hab es falsch verstanden; hatte die augen wohl noch nicht richtig auf

zum FULLTEXT index: du meinst allso, beim füllen der Tabelle den index wegnehmen, und danach wieder dran machen?

bringt das viel?
pq
 2006-09-15 12:29
#34673 #34673
User since
2003-08-04
12209 Artikel
Admin1
[Homepage]
user image
ob das viel bringt, weiß ich nicht. am besten ausprobieren. kommt wohl auf die
datenmenge an. wenn du nur einen datensatz hinzufügst, ist es natürlich
quatsch, und bei 1000 ist es wohl auch noch sinnlos.
Always code as if the guy who ends up maintaining your code will be a violent psychopath who knows where you live. -- Damian Conway in "Perl Best Practices"
lesen: Wiki:Wie frage ich & perlintro Wiki:brian's Leitfaden für jedes Perl-Problem
nepos
 2006-09-15 12:46
#34674 #34674
User since
2005-08-17
1420 Artikel
BenutzerIn
[Homepage] [default_avatar]
Ja, es bringt viel. Die Datenbank muss sonst bei jeder eingefuegten Zeile den Index mit updaten, was natuerlich jeden Insert bremst. Wenn du den Index dropst, alles einfuegst und dann den Index neu aufbaust, geht es schneller.
Ich hab hier unter Postgres ne recht dicke temporaere Tabelle (mit ca. 30 Mio Eintraegen). Das Aufbauen der Tabelle geht wesentlich fixer, wenn ich den Index erst nachtraeglich draufmache.
pq
 2006-09-15 13:57
#34675 #34675
User since
2003-08-04
12209 Artikel
Admin1
[Homepage]
user image
[quote=nepos,15.09.2006, 10:46]Ja, es bringt viel.[/quote]
trotzdem kommt es drauf an.
wenn du eine datenbank mit 100.000 einträgen hast und sie komplett neu
aufbaust, bringt es mit sicherheit viel.
wenn du eine datenbank mit 1 mio einträgen hast und nur 1000 hinzufügst,
bringt es wahrscheinlich nichts, sondern ist noch langsamer.
Always code as if the guy who ends up maintaining your code will be a violent psychopath who knows where you live. -- Damian Conway in "Perl Best Practices"
lesen: Wiki:Wie frage ich & perlintro Wiki:brian's Leitfaden für jedes Perl-Problem
nepos
 2006-09-15 17:07
#34676 #34676
User since
2005-08-17
1420 Artikel
BenutzerIn
[Homepage] [default_avatar]
Stimmt, die Relation is schon wichtig :)
In dem Fall gings um eine temporaere Tabelle, die nur fuer die Session aufgebaut wird und das mit allen Daten, sprich ca. 30 Mio INSERTs ;)
<< >> 8 Einträge, 1 Seite



View all threads created 2006-09-15 10:48.