Mam problem z zapytaniem do bazy w mysql. Trwa ono nieskończenie długo (lub ~ 154sekundy).
-- -- Struktura tabeli dla `londoner_users` -- CREATE TABLE `londoner_users` ( `user_id` int(5) NOT NULL AUTO_INCREMENT, `user_login` varchar(255) NOT NULL DEFAULT '', `user_pass` varchar(255) NOT NULL DEFAULT '', `user_name` varchar(255) NOT NULL DEFAULT '', `user_surname` varchar(255) NOT NULL DEFAULT '', `user_address` varchar(255) NOT NULL DEFAULT '', `user_city` varchar(255) NOT NULL DEFAULT '', `user_postcode` varchar(10) NOT NULL DEFAULT '', `user_province` int(5) NOT NULL DEFAULT '0', `user_gg` int(9) NOT NULL DEFAULT '0', `user_email` varchar(255) NOT NULL DEFAULT '', `user_email1` varchar(255) NOT NULL DEFAULT '', `user_phone` varchar(30) NOT NULL DEFAULT '', `user_cellphone` varchar(30) NOT NULL DEFAULT '', `user_fax` varchar(30) NOT NULL DEFAULT '', `user_certs` text NOT NULL, `user_info` text NOT NULL, `user_notices` text NOT NULL, `user_sworn` enum('yes','no') NOT NULL DEFAULT 'no', `user_busy` enum('yes','no') NOT NULL DEFAULT 'no', `user_paytype` int(5) NOT NULL DEFAULT '0', `user_date` int(15) NOT NULL DEFAULT '0', UNIQUE KEY `user_id` (`user_id`) ) ENGINE=MyISAM DEFAULT CHARSET=latin2 AUTO_INCREMENT=1775 ; -- -------------------------------------------------------- -- -- Struktura tabeli dla `londoner_users_combinations` -- CREATE TABLE `londoner_users_combinations` ( `user_combination_id` int(10) NOT NULL AUTO_INCREMENT, `user_id` int(5) NOT NULL DEFAULT '0', `combination_id` int(5) NOT NULL DEFAULT '0', `combination_prize` float NOT NULL DEFAULT '0', PRIMARY KEY (`user_combination_id`) ) ENGINE=MyISAM DEFAULT CHARSET=latin2 AUTO_INCREMENT=12523 ; -- -------------------------------------------------------- -- -- Struktura tabeli dla `londoner_users_spheres` -- CREATE TABLE `londoner_users_spheres` ( `user_sphere_id` int(5) NOT NULL AUTO_INCREMENT, `user_id` int(5) NOT NULL DEFAULT '0', `sphere_id` varchar(5) NOT NULL DEFAULT '', UNIQUE KEY `user_sphere_id` (`user_sphere_id`) ) ENGINE=MyISAM DEFAULT CHARSET=latin2 AUTO_INCREMENT=91384 ; -- -------------------------------------------------------- -- -- Struktura tabeli dla `londoner_users_types` -- CREATE TABLE `londoner_users_types` ( `user_type_id` int(5) NOT NULL AUTO_INCREMENT, `user_id` int(5) NOT NULL DEFAULT '0', `type_id` int(5) NOT NULL DEFAULT '0', `type_prize` float NOT NULL DEFAULT '0', UNIQUE KEY `user_type_id` (`user_type_id`) ) ENGINE=MyISAM DEFAULT CHARSET=latin2 AUTO_INCREMENT=14104 ;
Są takie 4 tabele. Napisałem wyszukiwarkę, która pięknie działała na małej ilości użytkowników. Przy ponad 1700 - zaczyna się problem - zapytanie trwa zbyt długo, baardzo obciąża serwer.
Wygląda ono następująco:
(przykładowo)
SELECT londoner_users.user_name AS name, londoner_users.user_surname AS surname, londoner_users.user_gg AS gg, londoner_users.user_phone AS phone, londoner_users.user_cellphone AS cellphone, londoner_users.user_email AS email, londoner_users.user_city AS city, londoner_users.user_postcode AS postcode, londoner_users.user_address AS address, londoner_provinces.province_name AS province, londoner_users.user_sworn AS sworn, londoner_users.user_id AS user_id FROM londoner_users_combinations LEFT JOIN londoner_users ON londoner_users.user_id = londoner_users_combinations.user_id LEFT JOIN londoner_users_spheres ON londoner_users_spheres.user_id = londoner_users.user_id LEFT JOIN londoner_users_types ON londoner_users_types.user_id = londoner_users.user_id LEFT JOIN londoner_provinces ON londoner_users.user_province = londoner_provinces.province_id WHERE londoner_users_spheres.sphere_id = '4' AND londoner_users_combinations.combination_id = '847' AND londoner_users.user_province = '15' AND londoner_users_types.type_id = '4' GROUP BY londoner_users.user_id
Problemem są ogromne tabele - londoner_users_spheres - ma ponad 68.600 rekordów oraz londoner_users_types - ponad 7000.
Może macie jakieś pomysły? :-(