Задавайте вопросы, мы ответим
Вы не зашли.
Есть таблица в ней 2640561 записей:
CREATE TABLE `domains1` (
`domain_id` bigint(20) unsigned NOT NULL AUTO_INCREMENT,
`name` varchar(255) NOT NULL,
`created` date NOT NULL,
`paid_till` date DEFAULT NULL,
`free_date` date DEFAULT NULL,
`post_date` date DEFAULT NULL,
`prefix` varchar(255) DEFAULT NULL,
`nserver1` varchar(255) DEFAULT NULL,
`owner_name` varchar(255) DEFAULT NULL,
`owner_prefix` varchar(255) DEFAULT NULL,
PRIMARY KEY (`domain_id`),
UNIQUE KEY `domain_id` (`domain_id`),
KEY `prefix_index` (`prefix`),
KEY `domains_created_index` (`created`),
KEY `domains_paid_till_index` (`paid_till`),
KEY `owner_name_index` (`owner_name`),
KEY `owner_prefix` (`owner_prefix`),
KEY `domains1_name_index` (`name`)
) ENGINE=MyISAM AUTO_INCREMENT=2640561 DEFAULT CHARSET=latin1
Запрос:
SELECT d.domain_id, d.name, d.owner_name, d.owner_prefix, d.created , d.paid_till, d.free_date FROM domains1 d ORDER BY d.name ASC LIMIT 59390,20
выполняется за 0,03 секунды. EXPLAIN говорит что используется индекс `domains1_name_index`
а вот запрос
SELECT d.domain_id, d.name, d.owner_name, d.owner_prefix, d.created , d.paid_till, d.free_date FROM domains1 d ORDER BY d.name ASC LIMIT 69390,20
выполняется за 30 секунд. EXPLAIN говорит что индексы не используются
В чем может быть проблема?? И как ее можно решить?? И вообще куда лучше смотреть??
Неактивен
Хм, попробуйте добавить USE INDEX или даже FORCE INDEX. Кажется,
что в данном случае индекс мог бы и неплохо использоваться. Другое
дело, что LIMIT большое число, 20 — это в любом случае плохая идея.
Неактивен
Спасибо всем! Извините что отнял ваше время))
Я решил проблему не совсем хорошо но начальство устроило.
Создал несколько таблиц содержащих только id для связей уже упорядоченные по нужному полю. Получилось таблиц 6. получая из них только id и все данные только нужной записи.
Да много памяти занимает и после изменения базы нужно запускать скрипт. Но доступ моментальный к любой страницы списка.
Неактивен
USE INDEX не помог
Неактивен