0
我有一個表,我需要的(不是我的數據庫設計)執行一個可怕的查詢。MySQL查詢幫助 - 多個查詢同桌
表很簡單:
`id` bigint(255) NOT NULL AUTO_INCREMENT,
`poster` varchar(30) NOT NULL,
`chattext` varchar(255) NOT NULL,
`timeposted` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
`type` int(3) NOT NULL DEFAULT '0',
`towho` varchar(30) DEFAULT NULL
我目前的查詢我想要做什麼,但一個可怕的代價到服務器。我只有少數用戶在最高CPU附近運行。可悲的是,他們每5秒鐘就會拉一次。
目前查詢:
SELECT c.poster, c.chattext, c.type, c.towho, c.timeposted, u.utype, u.locz
FROM chat c
LEFT JOIN users u ON c.poster=u.name
WHERE c.type!=4
UNION (
SELECT c.poster, c.chattext, c.type, c.towho, c.timeposted, u.utype, u.locz
FROM chat c
LEFT JOIN users u ON c.poster=u.name
WHERE c.type=4 AND c.towho='USERNAME')
UNION (
SELECT c.poster, c.chattext, c.type, c.towho, c.timeposted, u.utype, u.locz
FROM chat c
LEFT JOIN users u ON c.poster=u.name
WHERE c.type=4 AND c.poster='USERNAME')
ORDER BY timeposted DESC LIMIT 0, 25"
這得到每5秒被所有用戶在線進行。正如你所看到的,它很快就會成爲資源。
我已經習慣了MSSQL所以我應該能夠把握的概念爲MySQL和語法一直沒有太大的不同。這個查詢是在沒有添加用戶表的情況下提供給我的,因此我認爲我的思維模式一直困擾着找到更好的方法。
我想我這個做了錯誤的/複雜的方式。所以對提高性能的任何幫助表示讚賞。
看,我知道我是通過堅持原來的查詢設計使它過於複雜。不能相信我錯過了這一點,非常感謝加爾茨。 – JClaspill 2011-04-20 07:52:23