Kom ihåg mig?
Home Menu

Menu


Nested class - mysql problem

Ämnesverktyg Visningsalternativ
Oläst 2010-05-16, 18:41 #1
zilveer zilveer är inte uppkopplad
Medlem
 
Reg.datum: Jun 2006
Inlägg: 128
zilveer zilveer är inte uppkopplad
Medlem
 
Reg.datum: Jun 2006
Inlägg: 128
Standard Nested class - mysql problem

Hejsan,
jag hittade en väldigt bra sida som beskriver Nested class, den kan hittas på http://sslim7.com/

Jag har skapat tabellen:

Kod:
CREATE TABLE nested_category (
 category_id INT AUTO_INCREMENT PRIMARY KEY,
 name VARCHAR(20) NOT NULL,
 lft INT NOT NULL,
 rgt INT NOT NULL
);

INSERT INTO nested_category
VALUES(1,'ELECTRONICS',1,20),(2,'TELEVISIONS',2,9),(3,'TUBE',3,4),
(4,'LCD',5,6),(5,'PLASMA',7,8),(6,'PORTABLE ELECTRONICS',10,19),
(7,'MP3 PLAYERS',11,14),(8,'FLASH',12,13),
(9,'CD PLAYERS',15,16),(10,'2 WAY RADIOS',17,18);
Jag vill t.ex. ha ut en "single path" via denna nested class.
Koden jag använder är:
Kod:
SELECT parent.name
FROM nested_category AS node,
nested_category AS parent
WHERE node.lft BETWEEN parent.lft AND parent.rgt
AND node.name = 'FLASH'
ORDER BY parent.lft;

+----------------------+
| name                 |
+----------------------+
| ELECTRONICS          |
| PORTABLE ELECTRONICS |
| MP3 PLAYERS          |
| FLASH                |
+----------------------+
Som ni ser så får jag ut sökvägen till Flash via alla överkategorier.

Men MySQL hanterar inte denna fråga som optimal, jag får ut följande via explain queryn:
Kod:
id 	select_type 	table 	type 	possible_keys 	key 	key_len 	ref 	rows 	Extra
1 	SIMPLE 	node 	ref 	lft,name 	name 	62 	const 	1 	Using where; Using temporary; Using filesort
1 	SIMPLE 	parent 	ALL 	lft 	NULL 	NULL 	NULL 	10 	Range checked for each record (index map: 0x2)
Hur ska jag undvika "Using where; Using temporary; Using filesort" samt "Range checked for each record (index map: 0x2)"

Känns inte optimalt att använda nested class med MySQL, eller är det jag som missat något?
Tacksam för alla svar.
Mvh
zilveer är inte uppkopplad   Svara med citatSvara med citat
Oläst 2010-05-16, 19:14 #2
studiox studiox är inte uppkopplad
Har WN som tidsfördriv
 
Reg.datum: Aug 2004
Inlägg: 1 356
studiox studiox är inte uppkopplad
Har WN som tidsfördriv
 
Reg.datum: Aug 2004
Inlägg: 1 356
Vad är det som inte känns optimalt? MySQL är ju en relationsdatabas och för att få reda på en path måste man väl ta reda på alla RELATIONERNA? Eller hur hade du tänkt dig att det ska gå till annars?
studiox är inte uppkopplad   Svara med citatSvara med citat
Oläst 2010-05-16, 19:18 #3
zilveer zilveer är inte uppkopplad
Medlem
 
Reg.datum: Jun 2006
Inlägg: 128
zilveer zilveer är inte uppkopplad
Medlem
 
Reg.datum: Jun 2006
Inlägg: 128
Självklart vet jag att mysql är en relationsdatabas men kommer jag inte att få mysql_slow_queries av dessa förfrågningar?

vid EXPLAIN får jag ju
Kod:
Using where; Using temporary; Using filesort
känns inte riktigt optimalt.
zilveer är inte uppkopplad   Svara med citatSvara med citat
Oläst 2010-05-17, 01:08 #4
Jonas Jonas är inte uppkopplad
Klarade millennium-buggen
 
Reg.datum: Feb 2004
Inlägg: 3 364
Jonas Jonas är inte uppkopplad
Klarade millennium-buggen
 
Reg.datum: Feb 2004
Inlägg: 3 364
Sätt upp korrekta index.

Enligt din CREATE TABLE så har du inga index.
Jonas är inte uppkopplad   Svara med citatSvara med citat
Oläst 2010-05-17, 13:43 #5
zilveer zilveer är inte uppkopplad
Medlem
 
Reg.datum: Jun 2006
Inlägg: 128
zilveer zilveer är inte uppkopplad
Medlem
 
Reg.datum: Jun 2006
Inlägg: 128
Tack för svar,
men jag har skapat följande INDEX i efterhand:
Kod:
PRIMARY  	 PRIMARY  	 10   	 Edit   	 Drop   	 category_id
lft 	INDEX 	10  	Edit 	Drop 	lft
rgt
name 	INDEX 	10  	Edit 	Drop 	name
zilveer är inte uppkopplad   Svara med citatSvara med citat
Svara


Aktiva användare som för närvarande tittar på det här ämnet: 1 (0 medlemmar och 1 gäster)
 

Regler för att posta
Du får inte posta nya ämnen
Du får inte posta svar
Du får inte posta bifogade filer
Du får inte redigera dina inlägg

BB-kod är
Smilies är
[IMG]-kod är
HTML-kod är av

Forumhopp


Alla tider är GMT +2. Klockan är nu 20:03.

Programvara från: vBulletin® Version 3.8.2
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Svensk översättning av: Anders Pettersson
 
Copyright © 2017