Jak w temacie.
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? :-(