Rychlejší práce s databází – MySQL – Fórum – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu

Rychlejší práce s databází – MySQL – Fórum – Programujte.comRychlejší práce s databází – MySQL – Fórum – Programujte.com

 

Toto vlákno bylo označeno za vyřešené — příspěvek s řešením.
Franceq+1
Stálý člen
29. 3. 2012   #1
-
0
-

Zdravím,

řeším problém, jestli mám navrhnout DB pro můj projekt tak, že vpodstatě rozparsuji komplexní tabulku do více tabulek menších, které mají méně sloupců a data si budu tahat jen z těch, které aktuálně potřebuji nebo udělat jednu velkou, ve které bude hromada sloupců, ale všechny data pokupě....

Tabulky budou mít stejně řádků, takže na řádkách nikde neušetřím....jde mi v podstatě o to, jestli mysql tahá data stejně rychle (např přes podmínku where) z tabulky s tísíci sloupci nebo se dvěma sloupci....na čem ta rychlost záleží, jestli i na počtu sloupců....

Předem děkuji za odpověď, Franceq :)

Nahlásit jako SPAM
IP: 31.133.8.–
Mixxy
~ Anonymní uživatel
179 příspěvků
29. 3. 2012   #2
-
0
-

#1 Franceq
No, na to asi jednoduchá odpověď není. Všechno záleží od velikosti projektu. Dobrý je například pro zlepšení seskupit nejvytíženější tabulky do clusteru, rozhodně je důležitý optimalizovat softparsy, hardparsy, optimalizovat dotazy, aby nepoužívaly full index scan apod. Pokud pracuješ s Oraclem, podívat se, jetsli nepoužíváš bitmap indexy a ujistit se, že používáš B-tree indexy. Na Oraclu si nechat vygenerovat awrrpt report a vytunit reportované dotazy. Také by mohlo pomoct podívat se na velikost undo segmentu, zvýšit počet logilů a pokud používáš transakční zpracování dat, častěji commitnout transakce. Jak máš velkou databázi?

Nahlásit jako SPAM
IP: 109.80.36.–
Curo
~ Šéfredaktor
+8
Hero
29. 3. 2012   #3
-
+1
-
Zajímavé

Rozdělit — už kvůli zamykání tabulek/řádků, lepší struktuře a rychlost vyhledávání bude taky lepší.

Zasláno z mobilního telefonu.

Nahlásit jako SPAM
IP: 217.77.165.–
Guitar Hero Master, Project führer & zdejší čaroděj.
Sleduj mě na twitteru – @lukaschury.
Mixxy
~ Anonymní uživatel
179 příspěvků
29. 3. 2012   #4
-
0
-

Pardon,

teď se dívám zpětně na mou odpověď a nějak jsem opomenuj, že se tazatel ptá na MySQL.

Asi takhle z hlediska návrhu je vždycky nejlepší cesta dobře optimalizovat schéma tabulek, tj. při návrhu databáze se dostat alespoň do 4. NF.

Pokud ale uvažuješ nad tím, že bys tabulku, která má třeba 100 000 řádků rozdělil na 10 tabulek, který budou mít po 10 000 řádcích, tak to je nevhodné. Už z hlediska dotazů( představ si, že budeš dělat selekt přes konec jedné a začátek druhé tabulky, nebo mazat data). Vždycky než dělat takové radikální řešení je lepší optimalizovat tabulku pomocí indexů a optimalizovat architekturu MySQL, čimž můžeš vyladit výkon databáze do detailů a pokud máš databázi na svém stroji, pak mysql vhodně překompilovat.

Nahlásit jako SPAM
IP: 109.80.36.–
Mixxy
~ Anonymní uživatel
179 příspěvků
29. 3. 2012   #5
-
0
-

Druhá část tuningu databáze je pak tuning SQL dotazů. Pokud se dostaneš na určitou hodnotu řádků v db, je potřeba vzít v úvahu kvalitu dotazů. Pokud totiž používáš na velkých tabulkách full index scan, bude tvoje databáze čím dál pomalejší, pokud ale dotazy vhodně optimalizuješ, může ti databáze i s velkými tabulkami běhat rychle.

Nahlásit jako SPAM
IP: 109.80.36.–
Franceq+1
Stálý člen
30. 3. 2012   #6
-
0
-

#4 Mixxy
Právě že řádků bude všude stejný počet, jde jen o soupce.....

Myslel jsem si, že ta databaze si uděla bloky v paměti a pak prostě skáče z bloku na blok a je jí úplně jedno jak jsou ty bloky daleko od sebe....

Jinak zase nevýhoda mnoha tabulek je, že hromada dat je duplicitní...každá tabulka bude mít svoje ID, každá tabulka bude mít IDtohoKeKteremuSeVztahuje ....to je hromada dat navíc....prostě mi šlo o to...jestli se mi vyplatí nemít  v tabulce reálně např 60 sloupců, ale mít např 10 tabulek po 8 sloupcích....

Nahlásit jako SPAM
IP: 31.133.8.–
Řešení
Mixxy
~ Anonymní uživatel
179 příspěvků
30. 3. 2012   #7
-
+1
-
Zajímavé
Vyřešeno Nejlepší odpověď

Ahoj,

asi takhle, když budeš mít jednu tabulku, nezáleží na tom, kolik bude mít sloupců, protože index v indexovém stromu je pro řádek a né pro kolonku, takže je úplně jedno, kolik tabulka bude mít sloupečků, ale kvůli optimalizaci a minimalizaci redundantních dat se tabulky rozdělují např:

Pokud mám tabulku, kde mám sloupce:

ID | Jméno | Příjmení | Bydliště | Rok narození

tak tuto tabulku rozdělím na dvě tabulky a to:

ID | Jméno | Příjmení | Bydliště | id_rok_narození       a      ID | id_rok_narození | Rok narození

a obě tabulky jsou propojeny přes indexy id_rok_narození v obou tabulkách.

Ale samozřejmě můžeš nechat všechny informace v jedné tabulce a pokud budeš se budeš blížit problémům s rychlostí, můžeš použít klasické pravidlo databázistů:"Když je DB pomalá, nasadím index." Ale jednou, podle růstu databáze, stejně budeš muset začít tunit SQL dotazy, čili analýza exekučních plánů, řešit soft parsy, hard parsy, architekturu, kompilace mysql, ..

Pokud bys chtěl nějaké rady, či pomocnou ruku, můžeš se mi ozvat na mail: mixxy@seznam.cz, rád ti pomůžu.

Nahlásit jako SPAM
IP: 195.212.29.–
Franceq+1
Stálý člen
30. 3. 2012   #8
-
0
-

děkuji moc...fakt jsi mi pomohl a možná se ozvu, přecejenom nejsem SQL specialista a rada se vždy hodí... :)

Nahlásit jako SPAM
IP: 31.133.8.–
Zjistit počet nových příspěvků

Přidej příspěvek

Toto téma je starší jak čtvrt roku – přidej svůj příspěvek jen tehdy, máš-li k tématu opravdu co říct!

Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku

×Vložení zdrojáku

×Vložení obrázku

Vložit URL obrázku Vybrat obrázek na disku
Vlož URL adresu obrázku:
Klikni a vyber obrázek z počítače:

×Vložení videa

Aktuálně jsou podporována videa ze serverů YouTube, Vimeo a Dailymotion.
×
 
Podporujeme Gravatara.
Zadej URL adresu Avatara (40 x 40 px) nebo emailovou adresu pro použití Gravatara.
Email nikam neukládáme, po získání Gravatara je zahozen.
-
Pravidla pro psaní příspěvků, používej diakritiku. ENTER pro nový odstavec, SHIFT + ENTER pro nový řádek.
Sledovat nové příspěvky (pouze pro přihlášené)
Sleduj vlákno a v případě přidání nového příspěvku o tom budeš vědět mezi prvními.
Reaguješ na příspěvek:

Uživatelé prohlížející si toto vlákno

Uživatelé on-line: 0 registrovaných, 14 hostů

Podobná vlákna

Práce s databází - Pascal — založil El97za

JDBC ODBC práce s databází — založil Duff.Beerman

Rychlejší přepis texťáku — založil Franceq

 

Hostujeme u Českého hostingu       ISSN 1801-1586       ⇡ Nahoru Webtea.cz logo © 20032024 Programujte.com
Zasadilo a pěstuje Webtea.cz, šéfredaktor Lukáš Churý