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

Jaký je dobrý způsob, jak denormalizovat databázi mysql?

Vím více o mssql než o mysql, ale nemyslím si, že počet spojení nebo počet řádků, o kterých mluvíte, by vám měl způsobit příliš mnoho problémů se správnými indexy. Analyzovali jste plán dotazů, abyste zjistili, zda vám nějaké nechybí?

http://dev.mysql.com/doc/refman/5.0 /cs/explain.html

Jak již bylo řečeno, jakmile jste se svými indexy spokojeni a vyčerpáte všechny ostatní cesty, může být správnou odpovědí denormalizace. Pokud máte jen jeden nebo dva problémy, které jsou problémové, je pravděpodobně vhodný manuální přístup, zatímco pro vytvoření platformy pro vývoj datových kostek může být lepší nějaký nástroj pro ukládání dat.

Našel jsem zde web, který se tohoto tématu dotýká:

http://www.meansandends.com /mysql-data-warehouse/?link_body%2Fbody=%7Bincl%3AAggregation%7D

Zde je jednoduchá technika, kterou můžete použít k zachování jednoduchosti denormalizace dotazů, pokud jich děláte jen několik najednou (a já nenahrazuji vaše tabulky OLTP, pouze vytvářím novou pro účely vytváření sestav). Řekněme, že máte ve své aplikaci tento dotaz:

select a.name, b.address from tbla a 
join tblb b on b.fk_a_id = a.id where a.id=1

Můžete vytvořit denormalizovanou tabulku a naplnit ji téměř stejným dotazem:

create table tbl_ab (a_id, a_name, b_address); 
-- (types elided)

Všimněte si, že podtržítka odpovídají aliasům tabulky, které používáte

insert tbl_ab select a.id, a.name, b.address from tbla a
join tblb b on b.fk_a_id = a.id 
-- no where clause because you want everything

Chcete-li aplikaci opravit, aby používala novou denormalizovanou tabulku, přepněte tečky za podtržítka.

select a_name as name, b_address as address 
from tbl_ab where a_id = 1;

U velkých dotazů to může ušetřit spoustu času a objasnit, odkud data pocházejí, a můžete znovu použít dotazy, které již máte.

Pamatujte, že to obhajuji pouze jako poslední možnost. Vsadím se, že existuje několik indexů, které by vám pomohly. A až provedete denormalizaci, nezapomeňte započítat prostor navíc na vašich discích a zjistěte, kdy spustíte dotaz k naplnění nových tabulek. Pravděpodobně by to mělo být v noci nebo kdykoli je aktivita nízká. A data v této tabulce samozřejmě nebudou nikdy přesně aktuální.

[Ještě další úprava] Nezapomeňte, že nové tabulky, které vytvoříte, musí být také indexovány! Dobré na tom je, že můžete indexovat podle toho, co chcete, a nemusíte se starat o spory o aktualizaci zámku, protože kromě hromadného vložení bude tabulka vidět pouze vybrané položky.



  1. mysqli_query() očekává alespoň 2 parametry, z nichž 1 je uveden v?

  2. Převést číslo měsíce na název měsíce v SQL Server (T-SQL)

  3. Co je aktuální zobrazení snímků APPL_TOP

  4. Proč se učit Cassandru s Hadoopem?