2011-03-29 76 views
-2

用户访问source_slug(比如the_source_slug)。系统试图获得其他用户(谁使用the_source_slug)早些时候访问过的其他用户,根据最常用到最不常用的顺序排序。基本上,系统试图找到具有相似兴趣的用户并显示他们以前访问的其他页面。优化这个SQL!

是否需要优化这个查询帮助:

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; 
+4

你可能会有更多的l uck当用问号回答问题而不是让你听起来像是让我们工作时... – 2011-03-29 09:05:20

+0

我们不是狗请:) – 2011-03-29 09:05:55

+0

我不会让任何人工作......作为一名开发人员,我喜欢挑战。 ..我觉得它也会挑战其他问题解决者。在这个问题中,我也有“需要帮助”。 – Zero 2011-03-29 09:10:27

回答

1
  • 使用内部联接子查询
  • ,而不是在SOURCE_SLUG添加索引
+0

SOURCE_SLUG已经编入索引。尽管需要帮助。感谢您以正确的态度回应 – Zero 2011-03-29 09:12:32

+0

@Daniel,我是Java/PHP开发人员...不是sql专家。不是很擅长内部连接,独特和订购 – Zero 2011-03-29 09:19:30

+0

只需试一试。能够加入并不会让你成为一名SQL专家;-) – 2011-03-29 09:24:16