MySQL: rozdělit do dvou tabulek?

Peterson

MySQL: rozdělit do dvou tabulek?
« kdy: 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.
« Poslední změna: 03. 02. 2011, 16:12:20 od Petr Krčmář »


Peterson

Re: MySQL: rozdelit do dvou tabulek?
« Odpověď #1 kdy: 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.

Peterson

Re: MySQL: rozdělit do dvou tabulek?
« Odpověď #2 kdy: 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.

ded kenedy

Re: MySQL: rozdělit do dvou tabulek?
« Odpověď #3 kdy: 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.

Re: MySQL: rozdělit do dvou tabulek?
« Odpověď #4 kdy: 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ť.


eL

Re: MySQL: rozdělit do dvou tabulek?
« Odpověď #5 kdy: 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)

Inkvizitor

Re: MySQL: rozdělit do dvou tabulek?
« Odpověď #6 kdy: 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.

Socan

Re: MySQL: rozdělit do dvou tabulek?
« Odpověď #7 kdy: 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.

Logik

  • *****
  • 1 044
    • Zobrazit profil
    • E-mail
Re: MySQL: rozdělit do dvou tabulek?
« Odpověď #8 kdy: 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.