Portál AbcLinuxu, 14. května 2025 05:50

Dotaz: široká tabulka mysql

16.1.2011 13:30 Matlák
široká tabulka mysql
Přečteno: 576×
Odpovědět | Admin
Dobrý den.
Mám takový obecný "FAQ" dotaz na MySQL:

Navrhuju databázi pro položky které mají velký počet parametrů (asi 350) a potřeboval bych, aby bylo možné podle kteréhokoli z nich vyhledávat a řadit. Je lepší použít jednu širokou tabulku s 350 sloupci, ve které bych vyhledával normálně a nebo je lepší použít uloženou proceduru, přičemž by se jednotlivé parametry (krátké řetězce či čísla) uzavíraly v "hlavní" tabulce do stringu a pomocí substring() se rozporcovávaly, přičemž by vznikala dočasná tabulka ve které by se pak vyhledávalo?

Jde mi hlavně o časovou náročnost při velkém počtu položek (kolem 15-30 tisíc). Má vůbec cenu uvažovat nějaké uložené procedury? Děkuji předem za odpověď.

Řešení dotazu:


Nástroje: Začni sledovat (0) ?Zašle upozornění na váš email při vložení nového komentáře.

Odpovědi

16.1.2011 13:34 FooBar
Rozbalit Rozbalit vše Re: široká tabulka mysql
Odpovědět | | Sbalit | Link | Blokovat | Admin
Ta metoda pomoci substringu je silena od zacatku do konce a 15-30 tisic polozek neni moc.

That said, pokud vsechny polozky nemaj stejnej pocet parametru (nektery/vetsina) muze bejt NULL, doporucuju zvazit navrh parametru pres EAV (entity-attribute-value, viz wikipedia nebo Google).
16.1.2011 14:54 Šangala | skóre: 56 | blog: Dutá Vrba - Wally
Rozbalit Rozbalit vše Re: široká tabulka mysql
Odpovědět | | Sbalit | Link | Blokovat | Admin
Obecná poznámka (neznaje Váš případ):
350 parametrů neznamená obvykle 350 parametrů, i když je to například měření ze spoustou vstupů, lze to rozdělit do jednotlivých tabulek a ty pak dle daného účelu spojovat a vyhledávat, protože obvykle se nechce znát všech 350 parametrů naráz, a pak i při milionech záznamů lze tato data zpracovávat velmi efektivně na běžném notebooku.
Rovněž je možné, že se budou vyskytovat nějaké výčty reprezentované textem s omezenou množinou hodnot, ty lze chápat jako číselníky a jejich ID může mít jen bezpečný rozsah (třeba jen 1byte)
Dlouhé komentáře málo potřebné lze vyjmout do polí typu TEXT (textový blob), kterýžto není celý součástí záznamu.
Pokud je množství řádků omezené pouze na 30tis, tak níže zmíněná možnost EAV či podobné modely lze aplikovat i na běžném HW.
PS: Pravděpodobně ale stejně narazíte :).
substring doporučuji zapomenou - to pak snad už ani nedávejte do db…
Co se týče procedur, záleží na tom jaký je vstup a jak se parsuje fo podoby SQL.
Z mého pohledu je 15-30tis jen několik záznamů, pokud je není třeba zpracovat ve 2 sekundách :)
To, že trpíš stihomamem, ještě neznamená, že po tobě nejdou. ⰞⰏⰉⰓⰀⰜⰉ ⰗⰞⰅⰜⰘ ⰈⰅⰏⰉ ⰒⰑⰎⰉⰁⰕⰅ ⰏⰉ ⰒⰓⰄⰅⰎ ·:⁖⁘⁙†
17.1.2011 21:01 jekub
Rozbalit Rozbalit vše Re: široká tabulka mysql
všeobecná poznámka - nepoužívejte přechodníků neumíte-li to.
17.1.2011 21:24 Šangala | skóre: 56 | blog: Dutá Vrba - Wally
Rozbalit Rozbalit vše Re: široká tabulka mysql
Jsem rád když sesmolím větu, v které nechybí čárka či neprohodím předložku s/z, ještě abych si všímal, že jsem omylem použil přechodník a špatně. Asi narážíte na „neznaje“ asi by tam mělo být něco jako: „Píšu, neznaje Váš případ“ jestli ne, tak mi to taky nevadí…
Sorry jestli jsem poranil Vaše gramatické oko :), připomínku jsem si přečetl a nebudu se jí řídit :)
To, že trpíš stihomamem, ještě neznamená, že po tobě nejdou. ⰞⰏⰉⰓⰀⰜⰉ ⰗⰞⰅⰜⰘ ⰈⰅⰏⰉ ⰒⰑⰎⰉⰁⰕⰅ ⰏⰉ ⰒⰓⰄⰅⰎ ·:⁖⁘⁙†
17.1.2011 21:39 FooBar
Rozbalit Rozbalit vše Re: široká tabulka mysql
...nekritizujte gramatiku, kdyz Vam chybeji carky. :)
Dalibor Smolík avatar 17.1.2011 14:09 Dalibor Smolík | skóre: 54 | blog: Postrehy_ze_zivota | 50°5'31.93"N,14°19'35.51"E
Rozbalit Rozbalit vše Re: široká tabulka mysql
Odpovědět | | Sbalit | Link | Blokovat | Admin
Asi bych zvážil, zda některé parametry jsou důležitější než ostatní a podle nich zvolil počet sloupců. (Řadí se vždy podle jednoho nebo víc parametrů najednou?). Zbytek bych dal do pole "text" a při vyhledávání vytvořil formulář, kde by se zadal hledaný text nebo jen část řetězce, vyjely by jen řádky obsahující tento text. Něco takovéhov menším využívám také.
Rozdíly v řeči a ve zvyklostech neznamenají vůbec nic, budeme-li mít stejné cíle a otevřená srdce.
17.1.2011 14:32 kuka
Rozbalit Rozbalit vše Re: široká tabulka mysql
Odpovědět | | Sbalit | Link | Blokovat | Admin
Je to popsane dost kuse, ale pokud ma jit o neco jako "sesit tabulkoveho procesoru", tak to pres sloupce bude nejrychlejsi. Na variantu se substring rovnou zapomen. Zalezi i na tom, jak a zda se to ma potom zobrazovat, jak se to bude plnit, kolik z tech parametru maji jednotlive polozky v prumeru vyplneno apod.
19.1.2011 17:34 VM
Rozbalit Rozbalit vše Re: široká tabulka mysql
Odpovědět | | Sbalit | Link | Blokovat | Admin
Na substring zapomente - nefunguji na nem indexy.

Osobne bych zvolil treti moznost - tabulku se tremi sloupci - ID polozky, typem parametru a hodnotou parametru. Udelate index na typ a hodnotu, a dostanete co hledate - ID polozky.
20.1.2011 10:33 kuka
Rozbalit Rozbalit vše Re: široká tabulka mysql
Jen je treba vzit v uvahu, ze z tabulky o 30 tisicich radku se nam takto stala tabulka o 10 milionech radku. Ne ze by to dnes bylo neco hrozneho. Pro nektera pouziti je tato metoda vhodna, pro jina nikoliv. Napriklad slozeny index se nad takovym modelem udela opravdu tezko, stejne tak i unikatni klic nad urcitymi skupinami parametru, constraint davajicich hodnoty parametru do souvislosti apod. Tazatel o pouziti dat neuvadi temer nic, takze s vyjimkou odmitnuti te "substringove" metody je tezke mu smysluplne poradit.

Založit nové vláknoNahoru

Tiskni Sdílej: Linkuj Jaggni to Vybrali.sme.sk Google Del.icio.us Facebook

ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.