Основной Сформируйте запрос является:MySql оптимизация запросов, диапазон/композитный индекс/группа по
EXPLAIN SELECT SUM(impressions) as impressions, SUM(clicks) as clicks, SUM(cost) as cost, SUM(conversions) as conversions, keyword_id FROM `keyword_track` WHERE user_id=1 AND campaign_id=543 AND `recorded`>1325376071 GROUP BY keyword_id
кажется, что я могу либо индекс сказать user_id, CAMPAIGN_ID и keyword_id и получить GROUP BY без файла сортировать, хотя индекс диапазона на записанном действительно будет более агрессивно сокращаться по строкам, этот пример имеет большой диапазон, но другие запросы имеют гораздо меньший временной диапазон.
Таблица выглядит следующим образом:
CREATE TABLE IF NOT EXISTS `keyword_track` (
`track_id` int(11) NOT NULL auto_increment,
`user_id` int(11) NOT NULL,
`campaign_id` int(11) NOT NULL,
`adgroup_id` int(11) NOT NULL,
`keyword_id` int(11) NOT NULL,
`recorded` int(11) NOT NULL,
`impressions` int(11) NOT NULL,
`clicks` int(11) NOT NULL,
`cost` decimal(10,2) NOT NULL,
`conversions` int(11) NOT NULL,
`max_cpc` decimal(3,2) NOT NULL,
`quality_score` tinyint(4) NOT NULL,
`avg_position` decimal(2,1) NOT NULL,
PRIMARY KEY (`track_id`),
) ENGINE=InnoDB DEFAULT CHARSET=utf8 ;
Я оставлял ключи я в настоящее время из этого. В основном на вопрос, как лучше всего будет получить индекс в диапазоне, который по-прежнему индексирует хотя бы campaign_id и в идеале не нуждается в filesort (хотя это может быть приемлемым компромиссом для получения индекса диапазона в записанное время).
Спасибо за это, на самом деле не понять до того, как диапазон будет предотвратить дальнейшие части индекса от заказанного. –
добро пожаловать ... – Uday