sql >> Databáze >  >> RDS >> Mysql

Výkon MySQL:Jak využít indexování databáze MySQL

V tomto tutoriálu se budeme zabývat některými základy indexování. V rámci série MySQL představíme možnosti indexování MySQL a roli, kterou hraje při optimalizaci výkonu databáze. Liquid Web doporučuje konzultaci s DBA před provedením jakýchkoli změn ve vaší aplikaci na produkční úrovni.

Co je indexování?

Indexování je výkonná struktura v MySQL, kterou lze využít k získání nejrychlejších časů odezvy na běžné dotazy. Dotazy MySQL dosahují účinnosti generováním menší tabulky, nazývané index, ze zadaného sloupce nebo sady sloupců. Tyto sloupce, nazývané klíč, lze použít k vynucení jedinečnosti. Níže je jednoduchá vizualizace příkladu indexu pomocí dvou sloupců jako klíče.

+------+----------+----------+
| ROW | COLUMN_1 | COLUMN_2 |
+------+----------+----------+
| 1 | data1 | data2 |
+------+----------+----------+
| 2 | data1 | data1 |
+------+----------+----------+
| 3 | data1 | data1 |
+------+----------+----------+
| 4 | data1 | data1 |
+------+----------+----------+
| 5 | data1 | data1 |
+------+----------+----------+

Dotazy využívají indexy k identifikaci a načítání cílových dat, i když se jedná o kombinaci klíčů. Bez indexu má spuštění stejného dotazu za následek kontrolu každého řádku na potřebná data. Indexování vytváří zkratku s mnohem rychlejšími časy dotazů u rozsáhlých tabulek. Analogie s učebnicí může poskytnout další běžný způsob, jak si představit, jak fungují indexy.

Kdy povolit indexování?

Indexování je výhodné pouze pro velké tabulky s pravidelně přistupovanými informacemi. Například, abychom pokračovali v naší analogii s učebnicí, nedává smysl indexovat dětskou pohádkovou knihu s pouhým tuctem stránek. Je efektivnější jednoduše číst knihu, abyste našli každý výskyt slova „želva“, než byste museli nastavovat a udržovat rejstříky, dotazovat se na tyto rejstříky a poté prohlížet každou poskytnutou stránku. Ve světě výpočetní techniky tyto další úkoly kolem indexování představují plýtvání zdroji, které by bylo lepší, kdyby se neindexovalo.

Bez indexů, když tabulky rostou do obrovských rozměrů, doba odezvy trpí kvůli dotazům zacíleným na tyto tupé tabulky. Neefektivní dotazy se projevují v latenci výkonu aplikace nebo webu. Tuto latenci běžně identifikujeme pomocí funkce protokolu pomalých dotazů MySQL. Další podrobnosti o používání funkce pomalého protokolu dotazů naleznete v prvním článku této série:Výkon MySQL:Identifikace dlouhých dotazů.
Jakmile kolosální tabulka dosáhne bodu zvratu, dosáhne potenciálu výpadků aplikací a webů. . Provádění rutinních hodnocení pro rostoucí databázi zajišťuje optimální výkon databáze a vyhýbá se přirozeným přerušením dlouhých dotazů.

Výhody indexování MySQL vs. nevýhody

Používání indexování MySQL má své výhody a nevýhody a my probereme významné klady a zápory, které je třeba zvážit. Tyto aspekty vás povedou k rozhodnutí, zda je indexování vhodnou volbou pro vaši situaci.

Jaké informace indexuje?

Výběr toho, co se má indexovat, je pravděpodobně nejnáročnější částí indexování vašich databází. Určení toho, co je dostatečně důležité k indexování a co je dostatečně neškodné, aby se neindexovalo. Obecně řečeno, indexování funguje nejlépe u těch sloupců, které jsou předmětem klauzulí WHERE ve vašich běžně prováděných dotazech. Zvažte následující zjednodušenou tabulku:

ID, TITLE, LAST_NAME, FIRST_NAME, MAIDEN_NAME, DOB, GENDER, AGE, DESCRIPTION, HISTORY, ETC...

Pokud se vaše dotazy spoléhají na testování klauzule WHERE pomocí LAST_NAME a FIRST_NAME, pak by indexování podle těchto dvou sloupců výrazně prodloužilo dobu odezvy na dotaz. Alternativně, pokud vaše dotazy spoléhají na jednoduché vyhledávání ID, indexování podle ID by bylo lepší volbou.

Tyto příklady jsou pouze základním příkladem a v MySQL je integrováno několik typů indexovacích struktur. Následující stránka MySQL pojednává o těchto typech indexů podrobněji a doporučená četba pro každého, kdo uvažuje o indexování:Jak MySQL používá indexy

Co je to jedinečný index?

Dalším bodem, který je třeba zvážit při vyhodnocování toho, které sloupce mají sloužit jako klíč ve vašem indexu, je, zda použít omezení UNIQUE. Nastavením omezení UNIQUE bude vynucena jedinečnost na základě nakonfigurovaného indexovacího klíče. Jako u každého klíče se může jednat o jeden sloupec nebo o zřetězení více sloupců. Funkce tohoto omezení zajišťuje, že v tabulce na základě nakonfigurovaného klíče nebudou žádné duplicitní položky.

Co je index primárního klíče?

PRIMARY KEY, který se běžně používá jako omezení UNIQUE, se používá k optimalizaci indexů. Toto omezení zajišťuje, že určený PRIMÁRNÍ KLÍČ nemůže mít nulovou hodnotu. V důsledku toho dochází ke zvýšení výkonu, když běží na úložném stroji InnoDB pro danou tabulku. Toto posílení je způsobeno tím, jak InnoDB fyzicky ukládá data a umísťuje do klíče řádky s hodnotou null mimo souvislou sekvenci s řádky, které mají hodnoty. Povolení tohoto omezení zajistí, že řádky tabulky budou udržovány v souvislém pořadí pro rychlejší reakce.

Správa indexů

Nyní probereme některé základy manipulace s indexy pomocí syntaxe MySQL. V příkladech zahrneme vytváření, mazání a výpis indexů. Mějte na paměti, že tyto příklady obsahují zástupné položky pro konkrétní klíčová slova. Tato klíčová slova jsou ze své podstaty samozřejmá pro snadné čtení a níže je jejich přehled.

Výpis/zobrazení indexů

Tabulky mohou mít více indexů. Správa indexů bude nevyhnutelně vyžadovat možnost vypsat existující indexy v tabulce. Syntaxe pro zobrazení indexu je uvedena níže.

SHOW INDEX FROM tableName;

Vytváření indexů

Vytvoření indexu má jednoduchou syntaxi. Potíž je v určení, které sloupce potřebují indexování a zda je nutné vynucení jedinečnosti. Níže si ukážeme, jak vytvořit indexy s PRIMARY KEY a UNIQUE omezeními a bez nich.

Jak již bylo zmíněno, tabulky mohou mít více indexů. Vícenásobné indexování je užitečné pro vytváření indexů přizpůsobených dotazům požadovaným vaší aplikací nebo webem. Výchozí nastavení umožňuje až 16 indexů na tabulku, toto číslo zvyšte, ale obecně je to více, než je nutné. Indexy lze vytvořit během vytváření tabulky nebo je do tabulky přidat jako další indexy později. Obě metody projdeme níže.

Příklad:Vytvořte tabulku se standardním indexem

CREATE TABLE tableName (
ID int,
LName varchar(255),
FName varchar(255),
DOB varchar(255),
LOC varchar(255),
INDEX ( ID )
);

Příklad:Vytvořte tabulku s jedinečným indexem a primárním klíčem

CREATE TABLE tableName (
ID int,
LName varchar(255),
FName varchar(255),
DOB varchar(255),
LOC varchar(255),
PRIMARY KEY (ID),
UNIQUE INDEX ( ID )
);

Příklad:Přidání indexu do existující tabulky

CREATE INDEX indexName ON tableName (ID, LName, FName, LOC);

Příklad:Přidání indexu do existující tabulky s primárním klíčem

CREATE UNIQUE INDEX indexName ON tableName (ID, LName, FName, LOC);

Odstranění indexů

Při správě indexů může být nutné některé odstranit. Odstranění indexů je také velmi jednoduchý proces, viz příklad níže:

DROP INDEX indexName ON tableName;

Existuje mnoho způsobů, jak optimalizovat databázi pro skutečnou efektivitu. Pokud se chcete dozvědět více nebo převést typy vyhledávačů dostupné v MySQL, přečtěte si náš tutoriál MyISAM vs. InnoDB. Nebo pokud potřebujete vysoce funkční databáze, podívejte se na naši stránku produktu MySQL, kde najdete různé možnosti.

Series Navigation<>

  1. MariaDB USER() Vysvětleno

  2. Rails nedefinovaná metoda pro ActiveRecord_Associations_CollectionProxy

  3. Jak převést obrázek na pole bajtů pomocí javascriptu pouze pro uložení obrázku na serveru SQL?

  4. Klientské a síťové komponenty Oracle nebyly nalezeny