Jest tabela tematow na forum. Jedno z jej pul to FORUM_ID na ktorym jest index.
Problem jest nastepujacy, jesli mamy powiedzmy 2 miliony tematow i tylko 20 roznych for to "moc" (cardinality) indexu to tylko 20 na 2 miliony.
Przez to, gdy w zapytaniu mam " SELECT topic_id FROM tematy WHERE forum_id = 10 LIMIT 40" explain pokazuje ze mysql musi najpierw zebrac pule tematow z tego forum poprzez slaby index wiec dotyka az 30 000 roznych rekordow z tematami.
Jakie sa sposoby na pokonanie tego?
Ja dzis wpadlem na pomysl zeby stworzyc widoki (views) dla kazdego forum osobno czyli. CREATE VIEW tematy_z_forum_10 SELECT * FROM tematy WHERE forum_id = 10;
Dzieki temu zapytanie SELECT bedzie moglo pominac WHERE forum_id = 10 i bedzie wygladalo teraz tak: " SELECT topic_id FROM tematy_z_forum_10 LIMIT 40 "
Czy da to kopa? Widokow nigdy niestosowalem, jednak martwie sie ze mysql w momencie modyfikacji rekordow w tabeli tematow bedzie musial modyfikowac je podwojnie najpierw w tabeli tematy a potem w widoku tematy_z_forum_10.
Rady mile widziane i opinie o moim pomysle, czy jest moze jeszcze jakis inny sposob?