|
Добрый день!
Выполняю запрос 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
|
||||||||||||
|
|
Не так страшен temporary как его малюют.
Посмотрите в explain внимательно сколько строк таблицы предполагает обработать запрос. В некоторых случаях temp table очень быстр. Быстрее, чем беготня по ключам. mysql выбирает execution plan исходя из минимального прогнозируемого времени исполнения а не минимальной ресурсоемкости. temp table на 100 записей одзнозначно быстрее, чем прыжки по ключам в 1000000 записей. Так что смотрите в первую очередь в explain на прогноз числа обрабатываемых записей.
|
||||||
| Комментировать |