Оптимизируйте этот SQL! - PullRequest
       2

Оптимизируйте этот SQL!

0 голосов
/ 29 марта 2011

Пользовательский доступ к source_slug (скажем, the_source_slug). Система пытается получить другие отдельные source_slugs, к которым ранее обращались другие пользователи (которые использовали the_source_slug), отсортированные по наиболее часто используемым и наименее часто используемым. По сути, система пытается найти пользователей с похожим интересом и показать другие страницы, к которым они обращались ранее.

Нужна помощь в оптимизации этого запроса:

SELECT DISTINCT(SOURCE_SLUG), COUNT(SOURCE_SLUG) CATCOUNT 
  FROM topsources 
 WHERE SOURCE_SLUG <> ? 
   AND USER_ID IN (SELECT DISTINCT(USER_ID) 
                     FROM topsources WHERE SOURCE_SLUG = ?) 
GROUP BY SOURCE_SLUG ORDER BY CATCOUNT DESC

Структура таблицы:

`topsources` (
  `USER_ID` varchar(255) NOT NULL,
  `DATE_AND_HOUR` varchar(255) NOT NULL,
  `UPDATED_TIME` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
  `ITEM_ID` int(11) NOT NULL,
  `SOURCE_SLUG` varchar(100) NOT NULL,
  `FEED_PAGE_URL` varchar(255) NOT NULL,
  `CATEGORY_SLUG` varchar(100) NOT NULL,
  `REFERRER` varchar(2048) DEFAULT NULL,
  PRIMARY KEY (`USER_ID`,`DATE_AND_HOUR`(30),`ITEM_ID`),
  KEY `USER_ID` (`USER_ID`),
  KEY `FEED_PAGE_URL` (`FEED_PAGE_URL`),
  KEY `SOURCE_SLUG` (`SOURCE_SLUG`),
  KEY `CATEGORY_SLUG` (`CATEGORY_SLUG`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;

1 Ответ

1 голос
/ 29 марта 2011
  • Использовать внутреннее объединение вместо подвыбора
  • добавить индекс SOURCE_SLUG
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...