Optimizacija MySQL zahtev

Živjo,

imam problem z optimizacijo MySQL zahtev.

Tabele: news (id, userid), users (id), categories (id, parentid), regions (id), newscategories (id, newsid, parentid), newsregions (id, newsid, regionid). Primarni ključi so integerji, indeksi so postavljeni tudi na tujih ključih.

V news je 400.000 zapisov, users 800, categories 40, regions 200, newscategories 2.000.000, newsregions 800.000.

Dobiti moram vse avtorje, ki so v določeni regiji napisali vsaj 1 novico (cca. 10 na regijo); vse kategorije, ki imajo v določeni regiji napisano vsaj 1 novico in spadajo v 2. nivo (cca 10 na regijo. Primer: id, parent_id, title; 1, 0, Novice; 2, 1, Tehnologija; 3, 2, Računalništvo - v tem primeru dobi samo kategorijo "Tehnologija"; vse mesece, ki imajo v določeni regiji napisano vsaj 1 novico. Urediti je potrebno tudi pager (20 novic na stran, skupaj cca. 2.000 novic).

Nna začetku zaženem query (joinane tabele: news, newscategories, newsregions), ki prejme vse id-je novic (news.id), kategorij (newscategories.categoryid), avtorjev (news.user_id) in datume novic v določeni regiji (news.date), nato si vse shranim v arraye. To pomeni, da imam v php arrayu shranjenih 2.000 id-jev novic, 10 id-jev kategorij, 10 id-jev avtorjev in 10 mesecev (array[leto][mesec] = TRUE za mesece, ki imajo novice). Sledijo poizvedbe, s pomočjo katerih pridobim podatke, ki jih potrebujem (ime, priimek, ... avtorjev; ime, url, ... kategorij) in jih shranim v array za nadaljno obdelavo (ker je število zapisov kategorij in uporabnikov malo in pridobim na hitrosti, ker kasneje ne rabim joinov).

Sledi query za izpis novic (id, url, title, categoryid, userid ...), v katerem uporabljam paginator. Podatke kategorij in uporabnikov preberem iz arrayov, ki sem ga opisal v prejšnjem odstavku.

Kaj sploh naj bi skripta naredila: Na začetku izpis kategorij, avtorjev in mesecev (nekakšen filter), nato pa izpis novic s paginatorjem. Id-je si zapomnem zato, da ne joinam vedno 2-5 tabel, da pridem do 1 ali 2 podatkov.

Je to početje smiselno?