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, Select, From, Díl, MySQL, Jediný řádek, Sloupec

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


Aktuální číslo časopisu Computer

26 procesorů v důkladném testu

Zhodnotili jsme 18 bezdrátových reproduktorů

Jak fungují cash back služby?

Pohlídejte své děti na internetu