Fórum Root.cz

Hlavní témata => Vývoj => Téma založeno: Peterson 03. 02. 2011, 16:01:22

Název: MySQL: rozdělit do dvou tabulek?
Přispěvatel: Peterson 03. 02. 2011, 16:01:22
Dobry den,

rad bych zde polozil rychly dotaz...

Mam v MySQL tabulku "items", pricemz se do ni ukladaji nabidky a pozadavky. Jednotliva prislusnost se definuje priznakem "offer", kde 1=nabidka a 0=pozadavek.
Muj dotaz zni jestli je z hlediska vykonu lepsi pouzit dve oddelene tabulky (napr. "offers" a "requests") nebo je to jedno a vse nechat v jedne tabulce "items" s priznakem "offer=[0|1]"?

Diky za nazory

P.
Název: Re: MySQL: rozdelit do dvou tabulek?
Přispěvatel: Peterson 03. 02. 2011, 16:11:11
Zapomnel jsem zminit dulezitou vec, ze se pak vyhledavaji nabidky a k nim se nasledne prirazuji pozadavky:

Kód: [Vybrat]
SELECT * FROM items OFR LEFT JOIN items REQ ON REQ.forid=OFR.id
P.
Název: Re: MySQL: rozdělit do dvou tabulek?
Přispěvatel: Peterson 03. 02. 2011, 17:18:57
Tak jsem si to zkusil rozdelit a pri cca 170tis. zaznamech (pricemz je to zhruba pul na pul nabidky/pozadavky) je rozdil cca 0.1 s. Takze smysl to urcite ma.

P.
Název: Re: MySQL: rozdělit do dvou tabulek?
Přispěvatel: ded kenedy 03. 02. 2011, 19:03:11
obecne zalezi na tom, do jake miry je koncepcne nabidka shodna s pozadavkem.

nicmene, pokud mas udelane indexy i pres ten sloupec, tak by se vysledky moc lisit nemely. doporucuji podivat se, co vraci prikaz explain.
Název: Re: MySQL: rozdělit do dvou tabulek?
Přispěvatel: rooobertek 03. 02. 2011, 20:02:24
Logicky mi vychádza ako víťaz rozdelenie. Čisto z hľadiska logiky, nie výkonu. Na toto si bez meraní netrúfnem odpovedať.
Název: Re: MySQL: rozdělit do dvou tabulek?
Přispěvatel: eL 03. 02. 2011, 22:10:19
Rozhodne rozdelit:
+usetris sloupec pro rozliseni nabidky/poptavky a tim klesne datova velikost tabulky
+velikost indexu bude polovicni (vlastne mozna jeste mensi, kdyz nebude rozlisovaci sloupec)
+index bude efektivnejsi pri JOINu (uz kvuli predchozimu)
+zmeny tabulky, opravy a znovusestavovani indexu bude rychlejsi (bude se radit mene dat)
Název: Re: MySQL: rozdělit do dvou tabulek?
Přispěvatel: Inkvizitor 03. 02. 2011, 22:16:39
Souhlasím s eL a s dalšími, že si ta tabulka koleduje o rozdělení. Jediná její výhoda je pravděpodobně při výpisu všech položek třeba podle času zadávání, pokud to někdo potřebuje, protože tam je třeba obě tabulky do výsledku slučovat. Obecně se mi ale nezdá, že by pro nabídku i požadavek byla třeba stejná struktura řádku, pokud nejde o nějaký inzertní server nebo něco podobného, kde panuje skutečná symetrie.
Název: Re: MySQL: rozdělit do dvou tabulek?
Přispěvatel: Socan 04. 02. 2011, 00:02:36
Pokud neni k tomu duvod, tak bych to rozdelil. Az pak budes chtit pridat dalsi atribut, ktery ma smysl jen pro nabidku, tak se ti to zhrouti.
Název: Re: MySQL: rozdělit do dvou tabulek?
Přispěvatel: Logik 04. 02. 2011, 10:26:42
Odpověď je jednoduchá - budou se používat někdy akce přes nabídky i objednávky dohromady? Pak je dát dohromady. Nebudou? Nebo mají hodně rozdílné položky? Pak rozdělit....

V mysql máš pak ještě možnost použít engine merge, v postgresql inherited tables.