PHP – 44. díl – MySQL rychleji a nejrychleji

Tento díl je zaměřen na základní pravidla, jak pracovat s MySQL, aby vaše aplikace byla co nejrychlejší. Uvedena jsou jen nejpodstatnější pravidla, co a jak používat, protože na téma rychlosti databáze se píší velmi tlusté knihy, probírající do detailu každou drobnost a její vliv na rychlost. Dnešní díl je spíše teoretický, a tak nebudou uvedeny celé příklady, ale pouze střípky pro ilustraci.

Nepoužívejte SELECT *

První pravidlo, které byste měli dodržovat, aby práce s databází byla co nejrychlejší, je nepoužívat příkaz SELECT s hvězdičkou. Lepší je pokaždé poctivě a správně vyjmenovat pole, které potřebujete. Proto namísto příkazu:

SELECT * FROM Osoby

raději používejte přesně vyjmenované sloupce. Například potřebuji-li jméno a telefon, je lépe použít:

SELECT Jmeno,Telefon FROM Osoby

Rozdíl je jednoduchý, pokud použijete příkaz typu SELECT s hvězdičkou, potom se vracejí jako data všechny sloupce, a to i ty, které nepotřebujete. Kromě toho kdykoli v budoucnu můžete tabulku rozšířit o další sloupce, a pak by je SELECT s hvězdičkou také vracel. Je jasné, že bude lepší, když použijete příkaz SELECT, za kterým poctivě vyjmenujete používané sloupce. V takovém případě se totiž vracejí pouze data, která potřebujete, a to je samozřejmě rychlejší.

Používejte krátké SQL příkazy

Druhé pravidlo, zrychlující práci s databází, říká, že byste měli používat příkazy, které vracejí co nejmenší počet řádků. Je většinou málo užitečné, máte-li tabulku s několika tisíci řádky, přečíst ji celou. Ve skutečnosti ve valné většině případů potřebujete pracovat jenom s částí tabulky. Zpravidla můžete použít klauzule WHERE a LIMIT, a omezit tak počet řádků na potřebnou míru.

Nechte počítat databázi

Pokud potřebujete třeba vynásobit dva sloupce nebo použít jiný výsledek, potom je mnohdy lepší nechat počítat databázi. Často máte na vybranou, jestli si potřebnou část nechat vypočítat pomocí PHP, nebo pomocí databáze. Pak je lépe, pokud výpočty udělá databáze, protože je na to optimalizovaná.

Například můžete mít takový kód:

<?php
$sql = "SELECT cena,sleva FROM produkty";
$vysledek_sql = mysql_query($sql);
while($radek = mysql_fetch_array($vysledek_sql))
{
  $cena = $radek[`cena`];
  $sleva = $radek[`sleva`];
  $konecna_cena = $cena*(100-$sleva)/100.0;
  // ...a tak dále
}
?>

V tomto kódu se počítá konečná cena. A jak by to vypadalo, kdybychom si nechali konečnou cenu vypočítat přímo databází?

<?php
$sql = "SELECT cena,sleva,cena*(100-sleva)/100 AS konecna_cena FROM produkty";
$vysledek_sql = mysql_query($sql);
while($radek = mysql_fetch_array($vysledek_sql))
{
  $cena = $radek[`cena`];
  $sleva = $radek[`sleva`];
  $konecna_cena = $radek[`konecna_cena`];
  // ...
}
?>

Jak už bylo napsáno, většinou je efektivnější nechat počítat přímo databázi.

Rychlé zjištění počtu řádků

Agregační funkce COUNT umožňuje rychle zjistit počet řádků. Mnohdy potřebujete někde jenom vystavit číslo, které například říká, kolik produktů celkem obsahuje vaše databáze. Ačkoliv se přímo nabízí napsat to nějak podobně, je to nedoporučení hodné:

<?php
$sql = "SELECT * FROM produkt";
$vysledek_sql = mysql_query($sql);
$pocet = mysql_num_rows($vysledek_sql);
// ...
?>

Proč je tento příklad špatný? Protože nutíme databázi načíst všechny řádky, i když je ve skutečnosti nepotřebujeme.

Daleko lepší je použít SQL dotaz s agregační funkcí COUNT:

SELECT COUNT(*) AS pocet FROM produkt

Pokud použijete výše uvedený SQL dotaz, výsledkem bude jeden jediný řádek, obsahující počet všech záznamů. Databáze ví, že nemusí číst data, ale že si pouze přejete zjistit, kolik řádků tabulka produkt vlastně obsahuje.

Pak takový kus kódu s agregační funkcí COUNT vypadá následovně:

<?php
$sql = "SELECT COUNT(*) AS pocet FROM produkt";
$vysledek_sql = mysql_query($sql);
$radek = mysql_fetch_array($vysledek_sql);
$pocet = $radek[`pocet`];
?>

Diskuze (23) Další článek: Globe Internet vyměnila svůj starý název za nový

Témata článku: Software, Programování, PHP, Díl, Sloupec, Select, MySQL, From, Jediný řádek


Určitě si přečtěte

15 věcí, které umí Windows 10, ale možná o nich vůbec nevíte

15 věcí, které umí Windows 10, ale možná o nich vůbec nevíte

** Systém Windows 10 umí spoustu užitečných drobností ** O mnoha praktických funkcích pravděpodobně ani nevíte ** Poznejte užitečné tipy, které se vám mohou hodit každý den

Vladislav Kluska | 36

Portál občana už funguje. Na státní web vypadá až překvapivě použitelně

Portál občana už funguje. Na státní web vypadá až překvapivě použitelně

** Portál občana už funguje, vyřídíte na něm první požadavky ** Funkce se budou postupně rozšiřovat ** Web je docela moderní a přehledný

David Polesný | 65

Takhle zemřete, když asteroid dopadne na vaše město

Takhle zemřete, když asteroid dopadne na vaše město

** Jak by to dopadlo, kdyby na světovou metropoli či do nedalekého moře dopadl velký asteroid? ** Simulovali to odborníci z University of Southampton ** Výsledky jsou velmi zajímavé

Petr Kubala | 32

Budoucnost elektroniky: čeští vědci stojí za revolučním čipem, který nemá ve světě obdoby

Budoucnost elektroniky: čeští vědci stojí za revolučním čipem, který nemá ve světě obdoby

** Čeští vědci pod vedením Tomáše Jungwirtha vyvíjí nový typ revolučního paměťového čipu ** Zatímco v současnosti elektronika pracuje s elektrony, v budoucnu to budou spiny elektronů ** Čipy budou moci být klidně i 1 000x rychlejší a úspornější

Karel Javůrek | 32

Jak dopadl velký den Applu s náloží novinek: Sledujte, co letos připravil

Jak dopadl velký den Applu s náloží novinek: Sledujte, co letos připravil

** Apple večer představil novinky ** Ukáže nové operační systémy, ale čekala se i nová zařízení ** Začíná vývojářská konference Applu WWDC 2018

Karel Javůrek | 87


Aktuální číslo časopisu Computer

Velký test 18 bezdrátových sluchátek

Vše o přechodu na DVB-T2

Procesory AMD opět porážejí Intel

7 NVMe M.2 SSD v přímém souboji