Schrift
[thread]3702[/thread]

Wie genau die Indizes setzen...? (Seite 2)

Leser: 1


<< |< 1 2 3 >| >> 25 Einträge, 3 Seiten
olruebe01
 2006-07-12 20:30
#34542 #34542
User since
2006-01-19
192 Artikel
BenutzerIn
[default_avatar]
@dominicN und Renee: Habe eben diese ABfrage gemacht:
SELECT *
FROM `Produktdaten`
WHERE laufendeNummer = '100000008'
Also LIKE mal weggelassen. Abfragedauer 0.06 Sekunden... Es liegt wohl also an Like aber welche Alternative habe ich?
Oder liegt es nun an den Indizes, die KEINE Kardinalität haben?
pq
 2006-07-12 20:31
#34543 #34543
User since
2003-08-04
12209 Artikel
Admin1
[Homepage]
user image
[quote=olruebe01,12.07.2006, 18:22]Ich würde dann meine Abfrage in den ersten 3 Tabellen durchführen. Allerdings müsste ich jede Abfrage in allen 3 Tabelle durchführen, da ich nicht weiß, ob der Suchbegriff in der Artikelbezeichnung, der Kurz- oder Langbeschreibung vorkommt...[/quote]
klingt nicht so sinnvoll. langfristig solltest du dir was anderes überlegen, wenn du
wirklich effizient suchen willst.
für sybase z.B. gibt es Verity, eine eigene suchmaschine, die man z.B.
mit schlagwörtern befüllen kann. du bekommst dann zu den gefundenen
datensätzen die spalte, in der das wort gefunden wurde.
ich weiß nicht, ob man in MySQL einen kombinierten index anlegen kann,
wenn es sich um einen volltextindex handelt. kannst es ja mal ausprobieren.\n\n

<!--EDIT|pq|1152722006-->
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
pq
 2006-07-12 20:32
#34544 #34544
User since
2003-08-04
12209 Artikel
Admin1
[Homepage]
user image
[quote=olruebe01,12.07.2006, 18:30]Oder liegt es nun an den Indizes, die KEINE Kardinalität haben?[/quote]
keine kardinalität? was meinst du damit? kardinalität von 0? wie soll
das gehn?
vielleicht wäre es zeit, hier mal ein paar details über deine tabelle
zu posten. z.b. das erwähnte schow indexes.
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
pq
 2006-07-12 20:34
#34545 #34545
User since
2003-08-04
12209 Artikel
Admin1
[Homepage]
user image
[quote=olruebe01,12.07.2006, 18:30]WHERE laufendeNummer =  '100000008'
Also LIKE mal weggelassen. Abfragedauer 0.06 Sekunden...[/quote]
natürlich ist das schnell. die laufende nummer ist vermutlich auch
der primary key?
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
olruebe01
 2006-07-12 20:50
#34546 #34546
User since
2006-01-19
192 Artikel
BenutzerIn
[default_avatar]
show indexes:


Code: (dl )
1
2
3
4
5
6
7
  
Table  Non_unique  Key_name  Seq_in_index  Column_name  Collation  Cardinality  Sub_part  Packed  Null  Index_type  Comment  
Produktdaten 0 PRIMARY 1 laufendeNummer A 590063 NULL NULL   BTREE  
Produktdaten 1 Bezeichnung 1 Bezeichnung A NULL NULL NULL   BTREE  
Produktdaten 1 Kurzbeschreibung 1 Kurzbeschreibung A NULL 255 NULL   BTREE  
Produktdaten 1 Preis 1 Preis A NULL NULL NULL   BTREE  
Produktdaten 1 Beschreibung 1 Beschreibung A NULL 255 NULL   BTREE  
olruebe01
 2006-07-12 21:58
#34547 #34547
User since
2006-01-19
192 Artikel
BenutzerIn
[default_avatar]
Ahhhhh, es ist was passiert...

Ich habe gerade mal einen Index gelöscht. pq sagte, dass eine Kardinalität von Null nicht gehen kann. Also habe ich den Index von Bezeichnung gelöscht. Hat ewig gedauert. Nun haben aber die verbliebenen Indizes eine Kardinalität:
Kurzbeschreibung 295.000 und
Preis: 22.000 und
Langbeschreibung auch 295.000.

Eine LIKE '%fahrrad%' Suche in Kurzbeschreibung dauerte nun jetzt nur 0,12 Sekunden.

Was habe ich falsch gemacht?

Muss ich den Index NACH eingabe der Daten setzten? Oder vorher? Oder egal?
Kann es daran gelegen haben?

Ich habe bisher für jede Spalte einen Index angelegt.
Sollte ich besser für alle 3 Spalten einen Index anlegen?
Wo ist genau der Unterschied?\n\n

<!--EDIT|olruebe01|1152727203-->
olruebe01
 2006-07-12 22:27
#34548 #34548
User since
2006-01-19
192 Artikel
BenutzerIn
[default_avatar]
Eben habe ich 2 Indizes wieder gesetzt:
Zuerst habe ich Bezeichnung wieder gesetzt. Deer hat nun auch eine Kardinalität von 295.000
Danach habe ich einen Index auch die Spalte "Keywords" gelegt. Die hat eine Karinalität von 1.

Warum denn das nun wieder?
olruebe01
 2006-07-13 22:45
#34549 #34549
User since
2006-01-19
192 Artikel
BenutzerIn
[default_avatar]
Oh man, was mache ich nur falsch...?

Nach der Anleitung zum normalisieren bin ich meine Tabelle mal durchgegangen. ICh würde sagen, die ist "normal". DIese Eine Tabelle enthält lediglich Produktdaten. Immer eine Zeile für einen Artikel.
Die Zeilen sind:
Quote
PartnerID  Bezeichnung  Kurzbeschreibung  Beschreibung  Preis  alterPreis  Waehrung  Keywords  Bild_kl  Bild_mittel  Bild_gross  Deeplink  gueltig_von  gueltig_bis  status  lieferzeit  Bedingungen  Hersteller  Brand  Partner_Kategorie  update  Kategory und laufendeNummer("Artikelnummer")


Primary Key ist die laufendeNummer, da ich nur hier sicher sein kann, dass diese einmalig ist.

Für mein Verständnis sind die Zeilen ok, da sich jeder Eintrag auch wirklich NUR auf diesen Artikel beziehen.

Ich möchte nun nach einen Suchbegriff in Bezeichnung, Kurzbeschreibung, Langbeschreibung und Keywords suchen. Alle 4 Spalten sind vom Typ TEXT.

Ich habe jetzt folgendes Versucht:
1: Einen gemeinsamen Index über die 4 Spalten Bezeichnung, Kurzbeschreibung, Langbeschreibung und Keywords

2: Für jede dieser Spalten einen eigenen Index. Hierbei habe ich zum Test auch nur mal einen Index angelegt und nur in diesem gesucht.

Als Index-Typ habe ich FULLTEXT gewählt, habe aber auch INDEX ausprobiert...

Ich habe während des testes auch immer mit "explain gespielt". Die Antwort ist immer die Gleiche:
SQL-Befehl: EXPLAIN SELECT * FROM `Produktdaten` WHERE Bezeichnung LIKE '%fahrrad%';

table  type  possible_keys  key  key_len  ref  rows  Extra  
Produktdaten ALL NULL NULL NULL NULL 590447 Using where


Wenn ich das richtig sehe, findet MySQL also keinen Index, der für diese Suche zu gebrauchen wäre, richtig? Warum nicht???

Ich hatte es gestern ja anscheind kurz mal hinbekommen aber ich habe keine Ahnng, was da anders war...

Bin für jeden Tipp ankbar..
pq
 2006-07-13 23:53
#34550 #34550
User since
2003-08-04
12209 Artikel
Admin1
[Homepage]
user image
wenn du per volltext suchen willst, musst du auch MATCH AGAINST nehmen statt LIKE.
siehe http://dev.mysql.com/doc/refman/5.0/en/fulltext-search.html
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
olruebe01
 2006-07-14 00:31
#34551 #34551
User since
2006-01-19
192 Artikel
BenutzerIn
[default_avatar]
JAAAAAHHH!!! Das war's... Ich habe die letzen 24 Stunden gesucht und nichts gefunden. Bin immer nur wieder auf andere Leute gestoßen, die das gleiche Problem hatten... Ancheinend wissen das nur 4 Leute und Du bist einer davorn :-) Danke!!

Vielleicht kannst Du mir aber noch eine Frage hierzu beantworten:
1: Wie gebe ich eine ODER-Suche an? Ich kann ja UND-Begriffe gleich nacheinander eingeben. Geht das mit ODER auch oder muss ich dann ein doppeltes MATCH in die SQL-Abfrage einbauen? Diese Info habe ich da nicht gefunden (oder sie ist nicht für 3-jährige) :-)

Vielen Dank aber erstmal. SUPER *freu*

EDIT: Gerade gesehen, dass das falsch war. Standartmäßig ist es eine ODER-Suche. Wie mache ich also eine UND-Suche?\n\n

<!--EDIT|olruebe01|1152823182-->
<< |< 1 2 3 >| >> 25 Einträge, 3 Seiten



View all threads created 2006-07-12 07:01.