Fórum Root.cz
Hlavní témata => Vývoj => Téma založeno: 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.
-
Zapomnel jsem zminit dulezitou vec, ze se pak vyhledavaji nabidky a k nim se nasledne prirazuji pozadavky:
SELECT * FROM items OFR LEFT JOIN items REQ ON REQ.forid=OFR.id
P.
-
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.
-
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.
-
Logicky mi vychádza ako víťaz rozdelenie. Čisto z hľadiska logiky, nie výkonu. Na toto si bez meraní netrúfnem odpovedať.
-
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)
-
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.
-
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.
-
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.