Знам повече за 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;
За огромни заявки това може да спести много време и да ви стане ясно откъде идват данните и можете да използвате повторно заявките, които вече имате.
Не забравяйте, че аз препоръчвам това само като последна мярка. Обзалагам се, че има няколко индекса, които биха ви помогнали. И когато денормализирате, не забравяйте да отчетете допълнителното пространство на вашите дискове и да разберете кога ще изпълните заявката за попълване на новите таблици. Това вероятно трябва да е през нощта или когато активността е ниска. И данните в тази таблица, разбира се, никога няма да бъдат точно актуални.
[Още една редакция] Не забравяйте, че новите таблици, които създавате, също трябва да бъдат индексирани! Добрата част е, че можете да индексирате според желанието си и да не се притеснявате за спорове за заключване на актуализиране, тъй като освен груповото вмъкване, таблицата ще вижда само избрани.