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`];
?>

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

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

Velká podzimní aktualizace Windows 10 je tady: Co přináší Fall Creators Update

Velká podzimní aktualizace Windows 10 je tady: Co přináší Fall Creators Update

** Po půl roce je tu další aktualizace Windows ** A opět přináší hlavně hromadu drobných kosmetických vylepšení ** Podívali jsme se na ty nejzajímavější

17.  10.  2017 | Jakub Čížek | 182

Budoucností Windows 10 je Fluent Design. Takto bude jednou vypadat celý systém

Budoucností Windows 10 je Fluent Design. Takto bude jednou vypadat celý systém

** Fluent Design je vzhled, do kterého postupně Microsoft převleče celý systém ** Staví na průhlednosti a velkých plochách ** Do Windows 10 se z části dostane už zítra při vydání podzimní aktualizace

16.  10.  2017 | Stanislav Janů | 155

Nejlepší optické iluze: Z toho vám půjde hlava kolem

Nejlepší optické iluze: Z toho vám půjde hlava kolem

** Mozek se nechá snadno ošálit, a to mnoha způsoby ** Podívejte se na několik nejlepších optických iluzí ** Iluze dokazují, že vnímání reality může být značně zkreslené

16.  10.  2017 | Vojtěch Malý


Aktuální číslo časopisu Computer

Nový seriál o programování elektroniky

Otestovali jsme 17 bezdrátových sluchátek

Jak na nákup vánočních dárků ze zahraničí

4 tankové tiskárny v přímém souboji