Autor Zpráva
4ever
Profil
Ahoj,
můžete mi říct jaké uložiště pro MySQL nastavit? Učím se programovat webovky v php a ted jsem si teprve všiml, že tam mám nastaveno INNODB místo MyISAM. Jaké nastavení používáte vy a v čem je co lepší?
4ever
Profil
Tak zatím nikdo neodpověděl, ale už jsem našel odpověď v diskusi na jiném webu, tak snad nevadí, když to sem vložím...

Odkaz

Re: MyISAM vs. InnoDB
Autor: Bronzi- (---.vsb.cz)
Datum: 23. 10. 2008 09:24

Obecně vzato je MyISAM lepší pro tabulky, kde se jednou něco strčí a pak se to často tahá a InnoDB pro tabulky do kterých se často vkáladjí nebo obměňjí data. InnoDB taky umožnbuje relace ale ve většině případů je lepší používat MyISAM.
Jinak jde hlavně o to kam dáš indexy a aji jak máš napsané dotazy pokud máš dotazy typu select * from tabulka where podminky; a nakonec z toho dotazu použiješ jen 3 sloupce tak se není čemu divit. Nebo při zjištění počtu příspěvků si necháš všechno poslat a pak to zjistíš až přes mysql_num_rows tak je to taky špatně. Spíš bych doporučil optimalizovat než měnit typ tabulky.

Re: MyISAM vs. InnoDB
Autor: frosty22 (---.net.upcbroadband.cz)
Datum: 24. 03. 2011 18:36
Jde o to, že InnoDB podporuje cizí klíče a transakci, čili pokud jsi měl například MyIsam a chtěl bys přidal do jedné tabulky článek, a do další tabuky spojovací kategorie, tak se ti může stát, že to spadne v půli přidávání dat, a měl bys jen jednu tabulku plnou s neexistujícími vazbami .. oproti InnoDB, kde se uzamkne přidávání do transakcí ..
4ever
Profil
Vidím že záležitost je daleko složitější. Ještě užitečnější mi přijdou informace z komentářů odsud: Odkaz. Kdysi jsem zkoušel Wordpress a divil se proč je tak strašně pomalý. No a až včera jsem zjistil, že mám nastaveno InnoDB místo MyISAM a asi právě toto má velký vliv. Nebo je to nesprávným nastavením InnoDB či mysqld, což jsou věci, kterým moc nerozumím. O tyhle věci jsem se nikdy moc nestaral...
Medvídek
Profil
4ever:
Já třeba používám InnoDB, kvlůli cizím klíčům.
4ever
Profil
Medvídek:
Já třeba používám InnoDB, kvlůli cizím klíčům.

Co to jsou ty cizí klíče? Furt o tom narážím v komentářích...
Medvídek
Profil
4ever:
http://cs.wikipedia.org/wiki/Ciz%C3%AD_kl%C3%AD%C4%8D

Je to dobrý na to, žd když máš provázaný tabulky, tak určíš, že při smazání záznamu se s polu s tím smažou i ostatní vázané na ten záznam, nebo se třeba updatnou.
4ever
Profil
Medvídek:
Je tam nějaký kód ten je z mysql?
[CONSTRAINT [název omezení]] FOREIGN KEY
    [jméno klíče] (název sloupce tabulky nebo jejich seznam oddělený čárkami)
    REFERENCES jméno_tabulky (název sloupce nebo jejich seznam oddělený čárkami)
    [ON DELETE akce]
    [ON UPDATE akce]


Jestli je to mysql tak to zas něco co neumím. A mám obavy že to bude moc složité. To je pro pokročilé "hráče?".

Ale jestli to znamená, že na smazání celkem třech záznamů ve třech různých tabulkách budu potřebovat jen jeden příkaz tak by se to snad vyplatilo než to zadávat po třech samostatných příkazech.

No a nastavení těch cizích klíčů se provádí ručně pomocí php nebo se to dělá v phpmyadmin?
TomášK
Profil
SQL je na téhle úrovni z velké části přenositelné mezi databázemi, tahle konstrukce bude fungovat i v MySQL. Chceš-li používat databáze na úrovni pokročilejší než 'SELECT * FROM tabulka', měl bys vědět, jak databáze navrhovat (co jsou normální formy), vědět a používat cizí klíče a indexy, vhodné je používat integritní omezení. Tedy věci, které přímo ovlivňují chování běžných dotazů, ostatní, co mě napadá (triggery, procedury, pohledy, ...) přidává další funkčnost, stačí se to naučit až to budeš potřebovat.
4ever
Profil
TomášK:
Tolik odborných výrazů cizí klíč, integritní omezení, referenční integrita... ale je mi už jasné o co tam jde. No a ty integritní omezení tedy mám nastavit v phpmyadminovi? Asi jo, že? Nebo použít nějaký instalační skript php?

Bylo by možné, že bych sem hodil svoje nastavení a řekli by jste mi co mám změnit?

Dejme tomu tedy, že budu v budoucnu používat ty relační klíče nebo jak tomu říkáte... Takže bych chtěl, aby se zachovávala ta integrita u innoDb. Takže bych sem hodil to nastavení "Proměnné a nastavení serveru".
TomášK
Profil
4ever:
Cizí pojmy jsem použil hlavně proto, že se to pod nimi lépe dohledává, i když možná zní až moc odborně na to, co se za nimi skrývá. Jestli to budeš zadávat v phpmyadminovi nebo přes php nebo ještě jinak, je dost jedno. Dělej to stejným způsobem, jako vytváříš tabulky.

To, co tu řešíme, se týká struktury databáze. Proměnné a nastavení serveru předpokládám obsahuje informace o velikosti cachí, kam se co ukládá, nastavení logování a podobné. To řešit nemusíš, výchozí nastavení je rozumné, na hostingu to většinou řeší za tebe.
4ever
Profil
TomášK:
No tak já hlavně teprve zjišťuju to že existuje nějaká databáze information_schema a že se to asi nemá mazat :-)

Edit:
Kdysi dávno jsem vytvářel relace mezi tabulkama v MS Access (učil jsem se v kurzu). Takže ty cizí klíče jsou v pdstatě to samé co se dělá v Accessu jen se tomu neříká vytváření relací, ale přidávání klíčů. mě to nějak ani nenapadlo, že mi tenhle mechanismus udržující integritu v tabulkách schází.
4ever
Profil
Ty integritní omezení (cizí klíče) se mají vytvářet pouze v rodičovské tabulce?

čtu větu z wikipédie:
"Definice cizího klíče platí jen v jednom směru – často se pro účely lepší představy "cizí" tabulce říká rodičovská tabulka "

Takže jak nastavit to omezení?
Musím v phpmyadminu najet na:
Databáze: information_schema -> Tabulka: TABLE_CONSTRAINTS
A tam na něco kliknout? No já koukám, že prohlížet to jde, ale nastavovat ne.
TomášK
Profil
4ever:
Ty integritní omezení (cizí klíče) se mají vytvářet pouze v rodičovské tabulce?
Ano. Jen si nejsem jistý, jestli si správně vykládáš, co je rodičovská tabulka. Information schema to není, můžeš zas zapomenout, že existuje. Potřebuješ ho jedině, když chceš vědět, jaké tabulky/klíče apod. existují, upravovat ho myslím ani nejde. Koukni se na syntaxi CREATE TABLE, případně ALTER TABLE. Nejjednodušší verze toho, co potřebuješ vypadá takto:
CREATE TABLE authors ( id INT PRIMARY KEY, name VARCHAR(255) ) 
CREATE TABLE articles (id INT PRIMARY KEY, author_id  INT REFERENCES authors(id) )
4ever
Profil
TomášK:
Rodičovská tabulka je ta hlavní tabulka na které je ta dceřina závislá. Třeba tabulka zakaznici nebo majitele by byla rodičovska a auta by byla dceřina.

Už to asi chápu. Takže při vytváření tabulky se to musí udělat. A přitom si databáze zapíše do toho schématu jaké jsou relace mezi databázemi...

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm:

0