- 1. Pojmenování
- 2. Vždy používejte správný typ dat
- 3. Použijte CHAR (1) nad VARCHAR (1)
- 4. CHAR pro pevná data
- 5. Nepoužívejte regionální formáty data
- 6. Optimalizujte své požadavky na mezipaměť
- 7. Vyhněte se použití „SELECT *“ ve svých dotazech
- 8. Použijte LIMIT 1, pokud chcete pouze jeden řádek
- 9. Použití ***** BY
- 10. Vyberte vhodný základní motor
- 11. Kdykoli je to nutné, použijte klauzuli EXISTS
- 12. Ve svých dotazech SELECT použijte EXPLAIN
- 13. Indexujte a pro připojení použijte stejný typ sloupce
- 14. Pokud můžete, použijte NOT NULL
- 15. Tabulky s pevnou velikostí (statické) jsou rychlejší
- 16. Svislé dělení
- 17. Ukládá IP adresy jako UNSIGNED INT
- 18. Vytvořte zobrazení, abyste zjednodušili běžné použití v tabulkách
- 19. Nepoužívejte ***** BY RAND ()
- 20. Optimalizujte klauzuli WHERE
Databáze MySQL se díky svému vysokému výkonu, konzistenci, vysoké spolehlivosti a snadnému použití stala nejpopulárnější otevřenou zdrojovou relační databází na světě. Tyto výhody, které nám nabízí, jsou však často ovlivněny způsobem, jakým na něm pracujeme.
V tomto tutoriálu se dozvíte řadu tipů, které budou velmi užitečné a umožní nám vytěžit maximum z pohledu programátora i správce databáze.
Jaký nástroj použijeme?MySQL příkazová konzole '] MySQL má program nazvaný se stejným názvem jako databáze (mysql), který slouží ke správě databáze pomocí příkazového řádku.
OknaJe v adresáři jako:
C: \ Program Files \ MySQL \ MySQL Server 5.6 \ bin
Adresář se může lišit, například může být umístěn v kořenovém adresáři disku C: nebo na jakémkoli jiném místě, kde jsme možná nainstalovali MySQL. Pro přístup ke konzole MySQL ve Windows budeme muset být umístěni v tomto adresáři.
LinuxViz následující odkaz:
Přístup k MySQL z Linuxu
MacPočítače se systémem Mac OS X mezi dostupnými aplikacemi mají zabudovaný terminál příkazového řádku. Pro přístup se používá stejný příkaz jako v Linuxu.
phpMyAdminJedná se o bezplatný softwarový nástroj napsaný v PHP, který slouží ke správě MySQL prostřednictvím internetu. Pokud máte nainstalované místní vývojové prostředí, jako je XAMPP nebo WAMP, tento nástroj již bude nainstalován. Pokud máte plán hostování s panelem pro správu, většina z nich nabízí tento nástroj jako správce databáze MySQL.
[color = rgb (169,169,169)] phpMyAdmin z XAMPP [/ color]
ZVĚTŠIT
[color = # a9a9a9] phpMyAdmin od CPanel [/ color]
Když máme po ruce tyto 2 nástroje, můžeme začít testovat všechny tyto osvědčené postupy, které ukážeme níže.
Tyto jsou 20 nejlepších osvědčených postupů MySQL:
1. Pojmenování
Standardy kódování existují pro každý programovací jazyk, ale z hlediska MySQL jsme nenašli žádné univerzální postupy kódování, které by každý dodržoval. Přezkoumáním několika open source rámců založených na PHP však odfiltrujeme některá obecná aplikační pravidla, která nám pomohou rychleji psát dotazy SQL, eliminovat zmatky a konflikty, a to jak v dotazu, tak v programovacím jazyce, který používáme.
Hlavní pravidlaAbyste předešli problémům, mějte na paměti následující pravidla.
- Používejte malá písmena, protože vám to pomůže při psaní, zabrání se chybám v případě funkcí citlivých na malá a velká písmena atd.
- Nepoužívejte prázdné znaky, použijte místo toho podtržítko (_).
- Ve jménech nepoužívejte čísla, pouze anglické abecední znaky.
- Používejte platná srozumitelná jména.
- Jména by měla být samozřejmá.
- Jména nesmí obsahovat více než 64 znaků.
- Nepoužívejte předpony.
Pravidla pro názvy databázíDodržujte všechna výše uvedená obecná pravidla.
- Název může být v jednotném i množném čísle, ale databáze představuje databázi, a proto by měla být co nejvíce jednotná.
- Pokud je to možné, vyhněte se předponám.
Pravidla pro názvy tabulekU názvů tabulek používejte malá písmena: MySQL je obvykle hostováno na serverech Linux, rozlišují se malá a velká písmena, takže osvědčeným postupem je zmenšovat názvy tabulek.
- Názvy tabulek musí být v jednotném čísle: tabulka je jedinou entitou, stejně jako model, takže je zvláštní mít název tabulky v množném čísle.
- Předpony v názvu tabulky: Mnohokrát jsme viděli, že před tabulkami je uveden název databáze nebo název projektu. Někdy je to nutné, když v našem projektu máme mnoho databází, abychom překonali omezení některých poskytovatelů hostingu. Pokud to ale není nutné a náš projekt je malý, vyhněte se používání předpon.
Název políPoužijte všechna výše uvedená pravidla, tj. Používejte malá písmena, nepoužívejte mezery, nepoužívejte čísla a vyhýbejte se předponám.
- Pokud je to možné, použijte jedno nebo dvě krátká slova.
- Názvy polí musí být srozumitelné, například: cena, název_společnosti atd.
- Název primárního sloupce: Primární klíč může mít název ID nebo název tabulky _id. To bude záviset na výběru.
- Nepoužívejte vyhrazená slova v polích: *****, datum atd. V těchto případech je vhodnější použít předpony, jako je datum_záznamu atd.
- Nepoužívejte názvy sloupců se stejným názvem tabulky. Při psaní dotazů to může způsobit zmatek.
- Vyhněte se jménům ve zkrácených nebo zřetězených zkratkách.
2. Vždy používejte správný typ dat
Používejte datové typy založené na povaze dat. Použití irelevantních datových typů může zabírat více místa nebo vést k chybám.
PříkladPoužití varchar (20) k ukládání hodnot data a času namísto DATETIME může způsobit chyby během výpočtů času souvisejících s datem a je také možné v případě neplatného ukládání dat.
3. Použijte CHAR (1) nad VARCHAR (1)
Pokud jste uložili jeden řetězec znaků, použijte CHAR (1) místo VARCHAR (1), protože VARCHAR (1) bude k ukládání informací potřebovat další bajt. S nímž je třeba při správě těchto postav počítat.
4. CHAR pro pevná data
Pomocí dat CHAR můžete ukládat pouze data pevné délky
Příklad:
Použití CHAR (1000) namísto VARCHAR (1000) spotřebuje více místa, pokud je délka dat menší než 1000.
5. Nepoužívejte regionální formáty data
Při použití datových typů:
- ČAS SCHŮZKY
- DATUM
Vždy používejte formát RRRR-MM-DD nebo formát data ISO, který vyhovuje vašemu modulu SQL. Jiné regionální formáty jako DD-MM-RRRR, DD-MM-RRRR nebudou správně uloženy.
6. Optimalizujte své požadavky na mezipaměť
většina z Servery MySQL mají povolený systém mezipaměti. Je to jedna z nejúčinnějších metod ke zlepšení výkonu, která pochází z rukou databázového stroje. Když je stejný požadavek proveden vícekrát, výsledek je načten z mezipaměti, což je mnohem rychlejší.
Následující příklad je v PHP:
// Cache nefunguje $ r = mysql_query ("VYBRAT jméno OD uživatelů KDE záznam> = CURDATE ()");
// Cache FUNGUJE $ today = date ("Y-m-d"); $ r = mysql_query ("VYBRAT jméno od uživatelů KDE záznam> = '$ today'");Důvod, proč to nefunguje v prvním případě, je kvůli použití CURDATE (). Lze jej použít na všechny nedeterministické funkce, například NOW () a RAND (). Protože se výsledek vrácený funkcí může změnit, MySQL se rozhodne pro tento dotaz zakázat mezipaměť.
7. Vyhněte se použití „SELECT *“ ve svých dotazech
Obecně platí, že čím více dat je z tabulek načteno, tím pomalejší je dotaz. Vzhledem k tomu, že některé produkční tabulky mohou obsahovat desítky sloupců, z nichž některé jsou tvořeny velkými datovými typy, bylo by nerozumné vybrat všechny.
Je to dobrý zvyk do příkazu SELECT zadejte potřebné sloupce.
8. Použijte LIMIT 1, pokud chcete pouze jeden řádek
Někdy, když dotazujete své tabulky a víte, že potřebujete pouze jeden řádek. V těchto případech musíte z databáze vyžádat jeden výsledek, jinak zkontroluje všechny shody v klauzuli WHERE.
V těchto případech může přidání LIMIT 1 do dotazu výrazně zvýšit rychlost. Tímto způsobem databáze zastaví skenování výsledků v okamžiku, kdy ji najde, místo aby prošla celou tabulku nebo rejstřík.
// Mám uživatele z Madridu? // co nedělat: $ r = mysql_query ("VYBRAT * OD uživatele WHERE city =‘ Madrid ‘“); if (mysql_num_rows ($ r)> 0) {//…} // mnohem lepší: $ r = mysql_query ("VYBRAT 1 OD uživatele WHERE city =‘ Madrid ‘LIMIT 1“); if (mysql_num_rows ($ r)> 0) {//…}[color = # a9a9a9]LIMIT doporučení[/Barva]
9. Použití ***** BY
Použití ***** BY ve víceuživatelských prostředích může zpomalit dobu odezvy. Doporučujeme tedy použít klauzuli ***** BY pouze v případě potřeby.
Nezneužívejte jeho používání.
10. Vyberte vhodný základní motor
Pokud vyvíjíte aplikaci, která čte data častěji než psaní.
(například: vyhledávač), vyberte úložný stroj MyISAM.
Pokud vyvíjíte aplikaci, která zapisuje data častěji než čtení
(například: bankovnictví v reálném čase), vyberte modul úložiště InnoDB.
Volba nesprávného úložiště modul ovlivní výkon vašich dotazů.
11. Kdykoli je to nutné, použijte klauzuli EXISTS
Pokud chcete zkontrolovat data, nepoužívejte:
Pokud (VYBRAT počet (*) z tabulky WHERE col = 'nějaká hodnota')> 0Místo toho použijte klauzuli EXISTS:
EXISTS (SELECT * from Table WHERE col = 'some value')Což je rychlejší v době odezvy.
12. Ve svých dotazech SELECT použijte EXPLAIN
Použitím klíčového slova EXPLAIN získáte mnoho interních podrobností o tom, co MySQL dělá pro provedení vašeho dotazu. To vám může pomoci odhalit úzká místa a další problémy se strukturou dotazu nebo tabulky.
Výsledek dotazu EXPLAIN vám ukáže používané indexy, jak se tabulka zkoumá, jak se objednává atd.
Vyberte dotaz SELECT (nejlépe složitý se spojením) a na začátek všeho přidejte slovo VYSVĚTLIT. Výsledky vrátí v jednoduché tabulce. Předpokládejme například, že jsem zapomněl indexovat sloupec, zobrazila by se nám následující obrazovka:
ZVĚTŠIT
Po přidání indexu do tabulky stavu by to vypadalo takto:
ZVĚTŠIT
13. Indexujte a pro připojení použijte stejný typ sloupce
Pokud vaše aplikace obsahuje mnoho příkazů JOIN, musíte se ujistit, že sloupce, ke kterým se připojujete, jsou indexovány v obou tabulkách. To ovlivňuje jak MySQL interně optimalizuje PŘIPOJTE se k operacím.
Sloupce, ke kterým se připojujete, musí být stejného typu. Pokud například spojujete sloupec typu DECIMAL se sloupcem typu INT z jiné tabulky, MySQL nebude moci použít alespoň jeden ze dvou indexů. I kódování znaků musí být stejného typu pro sloupce Typ řetězce.
// hledám společnosti v mém městě $ r = mysql_query ("VYBRAT název_společnosti OD UŽIVATELŮ SE PŘIPOJIT ke společnostem ZAPNUTO (users.city = companyias.city) WHERE users.id = $ user_id");Oba městské sloupce musí být indexovány a oba by měly mít stejný typ a kódování znaků, jinak bude muset MySQL provést úplnou kontrolu tabulek.
14. Pokud můžete, použijte NOT NULL
Pokud nemáte konkrétní důvod použít hodnotu NULL, měli byste vždy nastavit sloupce na NENÍ NULL.
Nejprve se zeptejte sami sebe, zda by byl rozdíl mezi prázdným řetězcem a hodnotou NULL (nebo pro pole INT: 0 versus NULL). Pokud mezi těmito dvěma hodnotami není žádný problém, pole NULL nepotřebujete. Sloupce NULL vyžadují další místo a mohou vašim příkazům pro srovnání dodat složitost. Prostě se jim vyhýbejte, kdykoli můžete.
V každém případě chápeme, že v některých velmi konkrétních případech existuje důvod používat sloupce NULL, což není vždy špatná věc.
15. Tabulky s pevnou velikostí (statické) jsou rychlejší
Když má každý sloupec v tabulce pevnou délku, je celá tabulka považována za „statickou“ nebo „pevnou délku“.
Některé příklady typů sloupců, které NENÍ pevnou velikostí, jsou:
- VARCHAR
- TEXT
- KAPKA
Pokud zahrnete pouze jeden z těchto typů sloupců, tabulka již nebude mít pevnou velikost a bude s ní muset zacházet odlišně. MySQL engine.
Tabulky s pevnou velikostí mohou zvýšit produktivitu, protože nástroj MySQL rychleji prohledává vaše záznamy. Pokud si chcete přečíst konkrétní řádek v tabulce, můžete rychle vypočítat jeho polohu. Pokud není velikost řádku pevná, pokaždé, když musíte hledat, musíte nejprve zadat dotaz na index primárního klíče.
Je také snazší je hledat a znovu stavět po nehodě. Ale na druhou stranu by také mohly zabírat více místa.
16. Svislé dělení
Vertikální dělení je akt, který odděluje strukturu tabulky vertikálně z důvodů optimalizace.
Příklad 1:
Určitě budete mít uživatelskou tabulku, která obsahuje poštovní adresu, která se příliš často nepoužívá. Zde můžete rozdělit tabulku a uložit adresy do samostatné tabulky. Tímto způsobem by vaše hlavní uživatelská tabulka měla těsnější velikost. Jak víte, čím menší, tím rychlejší jsou tabulky.
Příklad 2:
V tabulce máte pole „last_access“. Aktualizuje se pokaždé, když uživatel vstoupí na vaši stránku. Ale každý přístup způsobí uvolnění mezipaměti dotazů pro danou tabulku. Co můžete udělat, je vložit toto pole do jiné tabulky, aby byly úpravy ve vaší uživatelské tabulce omezeny na minimum.
Musíte se ale také ujistit, že po rozdělení nemusíte tyto dvě tabulky neustále spojovat, jinak utrpíte pokles výkonu, přesně naopak, než jsme hledali.
17. Ukládá IP adresy jako UNSIGNED INT
Mnoho programátorů by vytvořilo soubor Pole VARCHAR (15) aniž by si uvědomili, že mohou ukládat IP adresy jako celá čísla. Když použijete INT, použijete v paměti pouze 4 bajty a má také pevnou velikost v tabulce.
Musíte se ale ujistit, že sloupec je UNSIGNED INT (celé číslo bez znaménka), protože IP adresy využívají celý 32bitový rozsah bez znaménka.
Ve svých dotazech můžete použít Funkce INET_ATON () převést IP adresu na celé číslo a INET_NTOA () udělat opak. V PHP existují také podobné funkce s názvem ip2long () Y long2ip ().
18. Vytvořte zobrazení, abyste zjednodušili běžné použití v tabulkách
Pohledy pomáhají zjednodušit jak složitá schémata, tak implementaci zabezpečení. Jedním ze způsobů, jak přispívají k části zabezpečení, je to, že vám umožňuje skrýt názvy polí před vývojáři.
Lze jej také použít k filtrování neindexovaných sloupců a ponechat pouze pole, která se ve vyhledávání zobrazují rychleji.
19. Nepoužívejte ***** BY RAND ()
Toto je jeden z těch triků, který na první pohled zní skvěle, a kde mnoho začínajících programátorů spíše upadá. Možná jste si neuvědomili neuvěřitelné zúžení, které může být způsobeno použitím této techniky ve vašich požadavcích.
Pokud opravdu potřebujete pro svůj výsledek náhodné tabulky, existují mnohem lepší způsoby, jak to udělat. Je jasné, že zaberou více kódu, ale vy zabráníte možnému zúžení, které se exponenciálně zvyšuje s rostoucím obsahem.
Problém je, že MySQL bude muset běžet RAND () (což vyžaduje výpočetní výkon) pro každý z řádků, než je seřadíte a vrátíte jeden řádek.
// způsob, jak to NEDĚLAT: $ r = mysql_query ("VYBRAT uživatelské jméno OD uživatele ***** PODLE RAND () LIMIT 1"); // mnohem lepší: $ r = mysql_query ("počet SELECT (*) OD uživatele"); $ d = mysql_fetch_row ($ r); $ rand = mt_rand (0, $ d [0] - 1); $ r = mysql_query ("VYBRAT uživatelské jméno OD LIMITU uživatelského jména $ rand, 1");Vyberete tedy náhodné číslo menší než počet výsledků a použijete to jako offset v klauzuli LIMIT.
20. Optimalizujte klauzuli WHERE
Toto jsou někteří tipy pro optimalizaci klauzule WHERE:
- Odstraňte nepotřebné závorky. Například:
Od Pro5 AND b = c A a = 5
- POČET (*) je optimalizován tak, aby vracel SELECT mnohem rychleji, pokud je na stole a bez použití WHERE. Například:
VYBERTE COUNT (*) Z tabulky.
- The Možnost SQL_SMALL_RESULT, lze použít s SKUPINA VYTVOŘENÁ nebo ODLIŠNÝ k označení, že sada výsledků je malá. V tomto případě MySQL používá velmi rychlé dočasné tabulky k ukládání výsledné tabulky místo použití třídění.
Kurzy MySQL