2011-03-29 85 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