Mam takie oto bazy.
-- phpMyAdmin SQL Dump -- version 3.3.10 -- <a href="http://www.phpmyadmin.net" target="_blank">http://www.phpmyadmin.net</a> -- -- Host: localhost -- Czas wygenerowania: 12 Kwi 2013, 11:55 -- Wersja serwera: 5.1.56 -- Wersja PHP: 5.3.6 SET SQL_MODE="NO_AUTO_VALUE_ON_ZERO"; /*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */; /*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */; /*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */; /*!40101 SET NAMES utf8 */; -- -------------------------------------------------------- -- -- Struktura tabeli dla `danejednostek` -- CREATE TABLE IF NOT EXISTS `danejednostek` ( `idDaneJednostek` int(11) NOT NULL AUTO_INCREMENT, `idGracza` int(11) NOT NULL, `user` varchar(255) COLLATE utf8_unicode_ci NOT NULL, `idJednostki` int(11) NOT NULL COMMENT '1: piechota; 2: lotnictwo; 3: pancerne; 4: przeciwlotnicze; 5: flota; 6: artyleria;', `nazwaJednostki` varchar(255) COLLATE utf8_unicode_ci NOT NULL, `nacjaJednostki` int(11) NOT NULL COMMENT '1:polak, 2:niemiec', `mapa` int(11) NOT NULL, PRIMARY KEY (`idDaneJednostek`) ) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci AUTO_INCREMENT=2820 ; -- -- Zrzut danych tabeli `danejednostek` -- INSERT INTO `danejednostek` (`idDaneJednostek`, `idGracza`, `user`, `idJednostki`, `nazwaJednostki`, `nacjaJednostki`, `mapa`) VALUES (1430, 1, 'system1', 4, '37mm FlaKzwilling 43 L / 89', 2, 4), (2, 2, 'system2', 6, '105mm M2A1 L / 22.5', 1, 5), (3, 3, 'system3', 4, 'Flakpanzer IV Wirbelwind', 2, 4), (4, 4, 'system4', 1, 'Oddział ciężkiej piechoty', 1, 5), (5, 5, 'system5', 2, 'MiG-3', 1, 7);
-- phpMyAdmin SQL Dump -- version 3.3.10 -- <a href="http://www.phpmyadmin.net" target="_blank">http://www.phpmyadmin.net</a> -- -- Host: localhost -- Czas wygenerowania: 12 Kwi 2013, 12:02 -- Wersja serwera: 5.1.56 -- Wersja PHP: 5.3.6 SET SQL_MODE="NO_AUTO_VALUE_ON_ZERO"; /*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */; /*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */; /*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */; /*!40101 SET NAMES utf8 */; -- -------------------------------------------------------- -- -- Struktura tabeli dla `miasta` -- CREATE TABLE IF NOT EXISTS `miasta` ( `idGracza` int(11) NOT NULL, `mapa` int(11) NOT NULL, `nrHexa` int(11) NOT NULL, `nacja` varchar(100) COLLATE utf8_unicode_ci DEFAULT NULL, `urlop` datetime NOT NULL, `ochrona` datetime NOT NULL, `poz_obrony` int(11) NOT NULL, `nazwa` varchar(100) COLLATE utf8_unicode_ci DEFAULT NULL, `id_miasta` int(11) NOT NULL AUTO_INCREMENT, PRIMARY KEY (`id_miasta`), KEY `mapa` (`mapa`,`nacja`), KEY `nrHexa` (`nrHexa`,`nacja`), KEY `mapa_2` (`mapa`,`nrHexa`) ) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci AUTO_INCREMENT=34 ; -- -- Zrzut danych tabeli `miasta` -- INSERT INTO `miasta` (`idGracza`, `mapa`, `nrHexa`, `nacja`, `urlop`, `ochrona`, `poz_obrony`, `nazwa`, `id_miasta`) VALUES (0, 62, 6017, '2', '0000-00-00 00:00:00', '0000-00-00 00:00:00', 100, 'BERLIN', 1), (22, 124, 2308, '2', '0000-00-00 00:00:00', '2013-02-24 23:56:48', 100, 'miccom1', 2), (12, 143, 13903, '1', '0000-00-00 00:00:00', '2013-02-17 17:53:04', 100, 'miccom2', 3), (5, 61, 6601, '2', '0000-00-00 00:00:00', '2013-03-27 15:23:28', 100, 'miccom3', 23), (38, 142, 13895, '1', '0000-00-00 00:00:00', '2013-02-18 10:37:19', 100, 'miccom4', 5), (0, 0, 0, NULL, '0000-00-00 00:00:00', '0000-00-00 00:00:00', 100, 'WARSZAWA', 22);
I do tego zapytanie:
SELECT * FROM danejednostek WHERE mapa IN ( SELECT mapa FROM danejednostek WHERE nacjaJednostki ='. $Session->gracz['nacja'].' UNION SELECT mapa FROM miasta WHERE nacja='.$Session->gracz['nacja'].' )';
I przy 2500 rekordów to zapytanie trwa 1700ms... Aż boję się, jak będę miał kilkanaście tysięcy bo tak mam, nawet do 20 tysięcy rekordów...
Czy da się jakoś to optymalnie "zapytać"?
Proszę o pomoc, oczywiście płatną jeśli zajdzie taka potrzeba
