FAQ |
Kalender |
![]() |
#1 | ||
|
|||
Medlem
|
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); 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 | +----------------------+ 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) 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 |
||
![]() |
![]() |
![]() |
#2 | ||
|
|||
Har WN som tidsfördriv
|
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?
|
||
![]() |
![]() |
![]() |
#3 | ||
|
|||
Medlem
|
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 |
||
![]() |
![]() |
![]() |
#4 | ||
|
|||
Klarade millennium-buggen
|
Sätt upp korrekta index.
Enligt din CREATE TABLE så har du inga index. |
||
![]() |
![]() |
![]() |
#5 | ||
|
|||
Medlem
|
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 |
||
![]() |
![]() |
Svara |
|
|