//表结构create table if not exists `radacct` ( `radacctid` bigint(21) not null auto_increment, `username` varchar(64) not null default '', `acctsessiontime` int(12) default null, `acctinputoctets` bigint(12) default null, `acctoutputoctets` bigint(12) default null, ... ...... primary key (`radacctid`), key `username` (`username`), key `acctsessiontime` (`acctsessiontime`), key `acctinputoctets` (`acctinputoctets`), key `acctoutputoctets` (`acctoutputoctets`)) engine=myisam default charset=utf8 collate=utf8_unicode_ci auto_increment=456017; $sql = 'select username, count(*) as numofsession, sum(acctsessiontime) as time, sum(acctinputoctets) as upload, sum(acctoutputoctets) as download, sum(acctinputoctets+acctoutputoctets) as bandwidth from radacct group by username'; mysql> explain select username, count(*) as numofsession, sum( acctsessiontime ) as time, sum( acctinputoctets ) as upload, sum( acctoutputoctets ) as download, sum( acctinputoctets + acctoutputoctets ) as bandwidth from radacct group by username; +----+-------------+---------+------+---------------+------+---------+------+--------+---------------------------------+| id | select_type | table | type | possible_keys | key | key_len | ref | rows | extra |+----+-------------+---------+------+---------------+------+---------+------+--------+---------------------------------+| 1 | simple | radacct | all | null | null | null | null | 456010 | using temporary; using filesort |+----+-------------+---------+------+---------------+------+---------+------+--------+---------------------------------+
数据量大概45w左右 在sum的字段上加上索引也无法提高查询效率
加上分页什么的就更慢了
怎么优化比较好啊 先拜谢了
回复讨论(解决方案) 首先,如果使用的计算,索引就已经失效了,所以你加不加索引没效果。
我的思路是这样的,如果表变得的不平凡,可以考虑缓存一份数据的办法来代替你每次的查询。
首先,如果使用的计算,索引就已经失效了,所以你加不加索引没效果。
我的思路是这样的,如果表变得的不平凡,可以考虑缓存一份数据的办法来代替你每次的查询。
好了 骚年 再没人来分都全给你了
加上分页什么的就更慢了我的思路是这样的,如果表变得的不平凡,可以考虑缓存一份数据的办法来代替你每次的查询。