0
Добрый день!
Выполняю запрос

EXPLAIN SELECT ref_id, MAX(curl_request_id) AS max_curl_request_id, MIN(curl_request_id) AS min_curl_request_id
FROM curl_requests
WHERE  context='completed' AND ref_id IN (2207956)
GROUP by ref_id
 

Имею:

ref: const,const
Extra: Using where; Using index; Using temporary; Using filesort
 


Стоит отметить, что ref_id и context образуют индекс

Когда я вместо ref_id IN (2207956) пишу AND ref_id IN (2207956,2207968), то есть, на первый взгляд, утяжелею запрос, так как должно выбраться больше строчек, то результаты улучшаются, так как проподают Using temporary; Using filesort:


ref: null
Extra: Using where; Using index;
 



CREATE TABLE  `curl_requests` (
  `curl_request_id` bigint(20) unsigned NOT NULL auto_increment,
  `prev_curl_request_id` bigint(20) unsigned NOT NULL default '0',
  `curl_request_key` varchar(255) NOT NULL default '',
  `url` varchar(255) NOT NULL default '',
  `params` text NOT NULL,
  `timeout` tinyint(2) unsigned NOT NULL default '0',
  `ssl_cert_path` varchar(255) NOT NULL default '',
  `errno` smallint(3) NOT NULL default '0',
  `http_code` mediumint(3) unsigned NOT NULL default '0',
  `response_body` text NOT NULL,
  `ref_id` int(11) NOT NULL default '0',
  `context` varchar(100) NOT NULL default '',
  PRIMARY KEY  (`curl_request_id`),
  KEY `prev_curl_request_id` (`prev_curl_request_id`),
  KEY `ref_id_context` (`ref_id`,`context`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8
 



Почему так происходит?
Еще хочу узнать, поподробнее, про ref. что значит ref: const,const, а что значит ref: null
3 года 6 месяцев назад

#ссылка
Без Create Table ответа на вопрос не получишь :)
Stalin 3 года 6 месяцев назад #
в самой таблице реально сколько строк?
gerasim 3 года 6 месяцев назад #
хотя да, пардон, видно что много...
gerasim 3 года 6 месяцев назад #
1208706 строк
Arty275 3 года 6 месяцев назад #
Попробуйте добавить ORDER BY ref_id в 1-й вариант и посмотреть что даст EXPLAIN.
a1ex07 3 года 6 месяцев назад #
а индекс составной у вас {context+ref_id} ? (именно в таком порядке?)
alien 3 года 6 месяцев назад #
комментировать


0
Не так страшен temporary как его малюют.
Посмотрите в explain внимательно сколько строк таблицы предполагает обработать запрос. В некоторых случаях temp table очень быстр. Быстрее, чем беготня по ключам. mysql выбирает execution plan исходя из минимального прогнозируемого времени исполнения а не минимальной ресурсоемкости.
temp table на 100 записей одзнозначно быстрее, чем прыжки по ключам в 1000000 записей. Так что смотрите в первую очередь в explain на прогноз числа обрабатываемых записей.
#ссылка
3 года 6 месяцев назад
комментировать

Ваш ответ:

Будет создана учетная запись и на email выслано письмо подтверждения.
или
Использовать OpenID

Получить OpenID
Что такое OpenID?

новые ответы

Первый раз на сайте?

askdev.ru — это социальный сайт вопросов и ответов для IT-специалистов: программистов, веб-дизайнеров, системных администраторов.
Как stackoverflow.com, только на русском.
о сайте » регистрация »
Показан

2238 раз

Задан

3 года 6 месяцев назад

Теги