Новости
Документация
Download
Webboard
Поиск
FAQ/ЧаВо
Обратная связь




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, версию программного обеспечения, по которому возникает вопрос, текст возникающих ошибок, и др.)
Помните, чем конкретнее Вы опишете ситуацию, тем больше шансов получить реальную помощь.
 Имя:
 E-mail:
 Тема:
 Текст:
Код подтверждения отправки: Code
41352



РЕКЛАМА НА САЙТЕ
  Создание сайтов | |