W bazie mam ok 1,3mln rekordów, jest dosyć dużo zapytań, acz nie trwają one długo bo ok 4s każde. Niestety suma sumarum, zapytania te przeciążają bazę mojego hostingodawcy - i często strona jest niedostępna. A że głównie to się dzieje przy odwiedzających botach...
tabele są dwie, ale zapytanie o które mi się rozchodzi nawiązuje tylko do jednej:
CREATE TABLE `PageRankHosts` ( `id` int(10) UNSIGNED NOT NULL AUTO_INCREMENT, `link` varchar(150) character SET utf8 collate utf8_unicode_ci DEFAULT NULL, `pr` tinyint(4) DEFAULT '0', `created` int(10) UNSIGNED NOT NULL DEFAULT '0', `fileWithDomains` int(10) UNSIGNED NOT NULL DEFAULT '0', `statusCreated` varchar(50) character SET utf8 collate utf8_unicode_ci DEFAULT NULL, `statusNow` varchar(50) character SET utf8 collate utf8_unicode_ci NOT NULL DEFAULT '', `domainCreated` int(10) UNSIGNED NOT NULL DEFAULT '0', `lastMod` int(10) UNSIGNED NOT NULL DEFAULT '0', `optionInfo` varchar(55) character SET utf8 collate utf8_unicode_ci NOT NULL, `registerIn` text character SET utf8 collate utf8_unicode_ci NOT NULL, `lastUpdate` int(10) UNSIGNED NOT NULL DEFAULT '0', `text` tinyint(3) UNSIGNED DEFAULT '0', `status` tinyint(3) UNSIGNED NOT NULL DEFAULT '3', `fullWhoIS` text character SET utf8 collate utf8_unicode_ci NOT NULL, `zwolniona` int(10) UNSIGNED NOT NULL DEFAULT '0', PRIMARY KEY (`id`), KEY `link` (`link`), KEY `created` (`created`), KEY `pr` (`pr`) );
Przykładowe zapytanie wygląda tak:
SELECT * FROM PageRankHosts ORDER BY `created` DESC, `pr` DESC LIMIT 926100,30
Jeśli wstawię zamiast * kolumny które mnie interesują (w sumie wszystkie) - nie ma różnicy. Różnica jest gdy usunę "order by", ale przy usunięciu pr, jest to ok 1s, jednak jest to rozwiązanie nie do końca satysfakcjonujące, bo tracę całość sortowania, przenieść sortowanie do PHP? Owszem, ale wyciąganie >200MB danych z bazy do php i tam obrabianie, nie będzie szybsze. Nawet wyciągnięcie samych tych dwóch kolumn nie usprawni tego, bo później trzeba dociągnąć pozostałe dane.
Proszę o wszystkie sugestie.