我非常需要幫助,在高流量網站上,過去6個月中一直引起很多悲痛的查詢。我是一名能夠編寫簡單SQL查詢的前端開發人員,因此我無法自行解決此問題。該查詢現在經常因缺少內存或CPU或VPS上其他查詢的干擾而鎖定mysql數據庫。我升級了硬件,但單靠這一點無法解決問題。因此,以下是對查詢嘗試執行的操作的描述:需要幫助來優化SQL查詢
用戶訪問特定URL(例如the_source_url)。應用程序試圖獲取其他用戶(他們也訪問過the_source_url)早些時候訪問過的相關source_urls,按最頻繁訪問次數最少訪問次數排序。基本上,應用程序試圖找到具有類似興趣的用戶並顯示他們以前訪問的其他頁面。
這是「複雜的查詢」,我寫我年輕的時候/愚蠢的網站沒有流量:
SELECT DISTINCT(SOURCE_URL), COUNT(SOURCE_URL) CATCOUNT
FROM topsources
WHERE SOURCE_URL <> ?
AND USER_ID IN (SELECT DISTINCT(USER_ID)
FROM topsources WHERE SOURCE_URL = ?)
GROUP BY SOURCE_URL 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_URL` varchar(100) NOT NULL,
`FEED_PAGE_URL` varchar(255) NOT NULL,
`CATEGORY_URL` 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_URL` (`SOURCE_URL`),
KEY `CATEGORY_URL` (`CATEGORY_URL`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;
請注意,我已經嘗試了內部連接而不是子選擇,但這不起作用。即,下面的查詢不返回與上述查詢相同的結果。
3210
當您使用GROUP BY時,不要使用DISTINCT。 – niktrs