|
MySQL.RU - Webboard
Вернуться
Оптимизация запросов (Василий) 28/05/2012 - 13:08:47
Re: Оптимизация запросов (Василий) 28/05/2012 - 15:23:40
Re: Оптимизация запросов (Akina) 28/05/2012 - 21:29:36
From: Василий - 28/05/2012 - 13:08:47
Subject:Оптимизация запросов
-----------------
Добрый день. Есть таблица:
CREATE TABLE `project_data` (
`id` int(11) unsigned NOT NULL AUTO_INCREMENT
`state_yandex` TINYINT(1) unsigned NOT NULL DEFAULT '0',
`state_google` TINYINT(1) unsigned NOT NULL DEFAULT '0',
`keyword_id` int(11) unsigned NOT NULL,
`date_create` datetime NOT NULL,
PRIMARY KEY (`id`),
KEY `keyword_id` (`keyword_id`),
KEY `keyword_date_create` (`keyword_id`,`date_create`),
KEY `state_yandex` (`state_yandex`),
KEY `state_google` (`state_google`)
) ENGINE=MyISAM AUTO_INCREMENT=2128 DEFAULT CHARSET=latin1
В которой около 2000 записей. Есть два запроса, которые выполняются около 10 секунд каждый:
а) Получить все последние записи с группировкой по keyword_id
Запрос:
SELECT id,keyword_id,state_yandex,state_google FROM `project_data` WHERE (`keyword_id`,`date_create`) IN (SELECT keyword_id, MAX(date_create) FROM `project_data` GROUP BY keyword_id)
EXPLAIN:
id select_type table type possible_keys key key_len ref rows Extra
1 PRIMARY project_data ALL NULL NULL NULL NULL 2015 Using where
2 DEPENDENT SUBQUERY project_data index NULL keyword_date_create 12 NULL 1 Using index
б) Получить все последние записи с группировкой по keyword_id, где state_yandex = 1 или state_google = 1.
Запрос:
SELECT keyword_id FROM project_data WHERE (`keyword_id`,`date_create`) IN (SELECT keyword_id,MAX(date_create) FROM project_data GROUP BY keyword_id) AND (state_yandex = 1 OR state_google = 1)
EXPLAIN:
id select_type table type possible_keys key key_len ref rows Extra
1 PRIMARY project_data index_merge state_yandex,state_google state_yandex,state_google 1,1 NULL 1063 Using union(state_yandex,state_google); Using where
2 DEPENDENT SUBQUERY project_data index NULL keyword_date_create 12 NULL 1 Using index
Вопрос: как можно эти два запроса оптимизировать, чтобы они выполнялись быстрее?
[Это сообщение - спам!]
Последние сообщения из форума
Уважаемые посетители форума MySQL.RU!
Убедительная просьба, прежде чем задавать свой вопрос в этом форуме, обратите внимание на разделы:
- ответы на наиболее часто задаваемые вопросы - FAQ
- раздел документация
- раздел поиск по сообщениям форума и документации
Также, старайтесь наиболее подробно указывать свою ситуацию (версию операционной системы, версию MySQL,
версию программного обеспечения, по которому возникает вопрос, текст возникающих ошибок, и др.)
Помните, чем конкретнее Вы опишете ситуацию, тем больше шансов получить реальную помощь.
41352
|
|