Mysql
 sql >> база данни >  >> RDS >> Mysql

Какъв е добър начин за денормализиране на mysql база данни?

Знам повече за mssql и mysql, но не мисля, че броят на присъединяванията или броят на редовете, за които говорите, трябва да ви създаде твърде много проблеми с правилните индекси. Анализирали ли сте плана на заявката, за да видите дали пропускате нещо?

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

Като се има предвид това, след като сте доволни от вашите индекси и сте изчерпали всички други възможности, денормализирането може да е правилният отговор. Ако имате само една или две заявки, които представляват проблеми, вероятно е подходящ ръчен подход, докато някакъв инструмент за съхранение на данни може да е по-добър за създаване на платформа за разработване на кубчета с данни.

Ето един сайт, който намерих, който засяга темата:

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

Ето една проста техника, която можете да използвате, за да поддържате лесно денормализирането на заявките, ако правите само няколко наведнъж (и не замествам вашите OLTP таблици, а просто създавам нова за целите на отчитането). Да приемем, че имате тази заявка в приложението си:

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

Можете да създадете денормализирана таблица и да я попълните с почти същата заявка:

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

Забележете, че долните черти съвпадат с псевдонимите на таблицата, които използвате

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

След това, за да коригирате приложението си да използва новата денормализирана таблица, превключете точките за долни черти.

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

За огромни заявки това може да спести много време и да ви стане ясно откъде идват данните и можете да използвате повторно заявките, които вече имате.

Не забравяйте, че аз препоръчвам това само като последна мярка. Обзалагам се, че има няколко индекса, които биха ви помогнали. И когато денормализирате, не забравяйте да отчетете допълнителното пространство на вашите дискове и да разберете кога ще изпълните заявката за попълване на новите таблици. Това вероятно трябва да е през нощта или когато активността е ниска. И данните в тази таблица, разбира се, никога няма да бъдат точно актуални.

[Още една редакция] Не забравяйте, че новите таблици, които създавате, също трябва да бъдат индексирани! Добрата част е, че можете да индексирате според желанието си и да не се притеснявате за спорове за заключване на актуализиране, тъй като освен груповото вмъкване, таблицата ще вижда само избрани.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. грешка при стартиране на apache след инсталиране на xampp

  2. Laravel 4:Как да приложим условие WHERE към всички заявки от клас Eloquent?

  3. SELECT COUNT() срещу mysql_num_rows();

  4. Тест за PDO връзка

  5. Jdbc драйвер не е намерен