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