mysql提⾼groupby查询的性能_mysql–优化GROUPBY性能–
增加⼤约五秒钟。。。
我正在⼤型数据库上运⾏各种各样的分析,这对我们的应⽤程序的⽤户来说是典型的.它存储了数百万条记录,我花时间确保字段类型是他们需要的(虽然我们也可以规范化并将这些列中的三列移动到外键).
默认情况下,查询按相关信息分组并计算重复记录的问题.这个⼩组会杀死我们 – 采取⼀个在0.08秒内运⾏的查询并将其平均降低到5.89.
⼀个⽰例查询:
SELECT player, x, y, z, COUNT(id), action_type
FROM prism_actions WHERE world = 'world'
AND (prism_actions.x BETWEEN -1119.650147217701 AND -919.650147217701)
AND (prism_actions.y BETWEEN -33.0 AND 167.0)
AND (prism_actions.z BETWEEN 385.14867792476133 AND 585.1486779247614)
AND prism_actions.action_time >= '2013-01-31 17:09:16'
GROUP BY prism_actions.block_id
LIMIT 1000;
我尝试了各种不同的查询,我们的应⽤可能会使⽤,分组是最⼤的性能命中之⼀.
我们⽬前的表结构:
CREATE TABLE IF NOT EXISTS `prism_actions` (
`id` int(11) unsigned NOT NULL auto_increment,
`action_time` timestamp NOT NULL default CURRENT_TIMESTAMP,
`action_type` varchar(25) NOT NULL,
`player` varchar(16) NOT NULL,
`world` varchar(255) NOT NULL,
`x` int(11) NOT NULL,groupby分组
`y` int(11) NOT NULL,
`z` int(11) NOT NULL,
`block_id` mediumint(5) default NULL,
`block_subid` mediumint(5) default NULL,
`old_block_id` mediumint(5) default NULL,
`old_block_subid` mediumint(5) default NULL,
`data` varchar(255) default NULL,
PRIMARY KEY (`id`),
KEY `x` (`x`),
KEY `action_type` (`action_type`),
KEY `player` (`player`),
KEY `block_id` (`block_id`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=44525743 ;
我们通常按三个字段分组,但这些字段对性能影响不⼤.我尝试过使⽤索引(有些⼈推荐了我们已经遇到的其他问题的组合索引,但是⽤户可能会要求应⽤程序查询的查询种类太多 – ⽆法真正知道他们将使⽤哪些字段) .
如何提⾼分组的性能?
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论