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

Maximální velikost tabulky pro databázi MySQL

Kdysi jsem pracoval s velmi velkou (Terabyte+) MySQL databází. Největší tabulka, kterou jsme měli, měla doslova přes miliardu řádků.

Fungovalo to. MySQL zpracovávala data většinu času správně. Bylo to však extrémně nemotorné.

Už jen zálohování a ukládání dat byla výzva. Pokud bychom potřebovali, obnova tabulky by zabrala dny.

Měli jsme četné tabulky v rozsahu 10–100 milionů řádků. Jakékoli významné připojení ke stolům bylo příliš časově náročné a trvalo by věčnost. Napsali jsme tedy uložené procedury, které 'procházejí' tabulky a zpracovávají spojení proti rozsahům 'id'. Tímto způsobem bychom zpracovali data 10-100 000 řádků najednou (Připojit proti id 1-100 000, pak 100 001-200 000 atd.). Bylo to výrazně rychlejší než spojení proti celému stolu.

Použití indexů na velmi velkých tabulkách, které nejsou založeny na primárním klíči, je také mnohem obtížnější. Mysql ukládá indexy ve dvou částech -- ukládá indexy (jiné než primární index) jako indexy hodnot primárního klíče. Indexovaná vyhledávání se tedy provádějí ve dvou částech:Nejprve MySQL přejde do indexu a vytáhne z něj hodnoty primárního klíče, které potřebuje najít, poté provede druhé vyhledávání v indexu primárního klíče, aby zjistilo, kde tyto hodnoty jsou.

Síť toho spočívá v tom, že pro velmi velké tabulky (1-200 milionů plus řádky) je indexování podle tabulek více omezující. Potřebujete méně, jednodušších indexů. A provádění i jednoduchých výběrových příkazů, které nejsou přímo v indexu, se nemusí nikdy vrátit. Kde klauzule musí klikněte na indexy nebo na to zapomeňte.

Ale všechno, co bylo řečeno, věci skutečně fungovaly. Byli jsme schopni používat MySQL s těmito velmi velkými tabulkami a provádět výpočty a získávat správné odpovědi.



  1. Funkce pro odstranění akcentů v postgreSQL

  2. Nelze najít sloupec dbo nebo uživatelem definovanou funkci nebo agregaci dbo.Splitfn nebo je název nejednoznačný

  3. Jak funguje DENSE_RANK() v SQL Server

  4. CHYBA PostgreSQL:zrušení příkazu kvůli konfliktu s obnovou