优化这个SQL!

时间:2011-03-29 09:02:27

标签: mysql sql

用户访问source_slug(例如,the_source_slug)。系统尝试获取其他用户(使用过the_source_slug)之前访问过的其他不同的source_slugs,按最常用的排序方式排序。基本上,系统试图找到具有类似兴趣的用户并显示他们之前访问过的其他页面。

需要优化此查询的帮助:

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 个答案:

答案 0 :(得分:1)

  • 使用内部联接而不是子选择
  • 在SOURCE_SLUG
  • 上添加索引