Autor Zpráva
karel1
Profil *
Ahoj,
rovnou se přiznám, že nejsem databázový specialista, ale spíše JS programátor, který občas potřebuje něco pro vlastní potřeby spíchnout v databázích.

Mám dva dotazy, v kterých nemám moc jasno.

1. InnoDB vs. MyISAM. Co kdy volit a proč, jaký je mezi nimi rozdíl?
2. počítání záznamů, tedy COUNT(...). Našel jsem varianty COUNT(sloupec), COUNT(*) a COUNT(1) a zdá se mi, že každý doporučuje něco jiného. Co použít, když potřebuji spočítat všechny řádky, které odpovídají nějaké podmínce? Liší se přístup v závislosti na typu tabulky, viz bod 1)?

Děkuji.
juriad
Profil
COUNT(*) spočítá počet řádků.
COUNT(sloupec) spočítá počet řádků neobsahujících v sloupec hodnotu NULL.
COUNT(1) je to samé jako COUNT(sloupec) jen v tomto případě nehrozí hodnota NULL.

První je teoreticky nejrychlejší, protože databáze to lépe pochopí a může si dovolit provádět optimalizace.
https://dev.mysql.com/doc/refman/5.1/en/group-by-functions.html#function_count
http://www.mysqlperformanceblog.com/2007/04/10/count-vs-countcol/

Ale jako vždy, pokud dotaz není pomalý (změřeno), nech ho raději tak, abys mu příště rozumněl, až si ho po několika měsících přečteš.
Optimalizovat má cenu jen tehdy, když je pomalost problém a jen ty části, kde se tráví hodně času.

MyISAM a InnoDB:
K tomu už také bylo napsáno hodně. Pročti si porovnání v první odpovědi:
http://stackoverflow.com/questions/20148/myisam-versus-innodb
Není to tam explicitně zmíněné, ale důvodem pro zvolení InnoDB bývá možnost konroly konzistence pomocí cizích klíčů.

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: