No więc zrobiłem tak przy zapisie generuję sobie takie zapytanie :
Kod
mysql_query("
CREATE TABLE IF NOT EXISTS x_stat_".$tabela_nazwa." (
id BIGINT( 255 ) UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY ,
site_id INT(11) NOT NULL ,
key_id INT(11) NOT NULL ,
wejsc INT(11) NOT NULL ,
link_type INT(11) NOT NULL ,
link_url VARCHAR(1024) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL ,
proxy_query VARCHAR(15) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL ,
date DATE NOT NULL ,
time TIME NOT NULL ,
INDEX ( `site_id` , `key_id` , `date` )
) ENGINE = MYISAM ");
Potem wypełniam tabelę . Danymi .
Na min robię 1000 - 2000 zapisów rekordów.
Ale już przeciętny użytkownik może na raz odczytać tylko wybrane przez siebie 3 miesiące. Co daje max około 264 960 000 rekordów.
Tak więc zapytanie pójdzie tak jakby było ich tylko tyle. Nawet po 5 latach będzie działać tak samo.
Każdy miesiąc nazywa się inaczej i składam to tak:
Kod
$rok = strftime('%Y',time());
$mies = strftime('%b',time());
$tabela_nazwa =$rok."_".$mies;
$tabela_nazwa = "x_stat_".$tabela_nazwa;
Wygenerowałem sobie jakiś jeden mld rekordów w pętli przy użyciu CRON. W pojedynczej tabeli za każdym razem przeszukiwało całą tabelę i trwało to dość długo. Oczywiście gdy ustawiłem indeks po dacie to było niemal identycznie jak z moim swichtem. Teraz sobie przekierowuję zapytania do innych tabel w PHP.
Problem był w tym, że system miał trzymać w pamięci ostanie 5 lat i potem przesuwać dane do archiwizacji. Dane w z archiwum będą trafiały na inny serwer i nie będą wykorzystywane w bieżącym działaniu w aplikacji.
Dlatego zrobiłem to po swojemu mimo, iż teoretycznie tak nie powinno się robić.
Ps. może ktoś sprawdzić czy dobrze tworzę tabelę ? Chodzi mi o to czy dobrze zoptymalizowana ?