我有什么:(解释)
我使用FreeRadius作为radius服务器,我想计算今天用户使用的总流量
我有一个名为users
的表,第二个表是users_graph
。
users_graph
表每15分钟收集一次带宽数据(每个用户每天96行)。
我尝试进行查询以收集具有指定组名的用户以及今天使用的总流量的总和。
我的所作所为:
我在下面进行SQL查询并测试结果,在每个用户的users_graph上测试20个用户和80行。
结果:我的查询执行时间约为3秒。
我想要的是什么:
我尝试改进查询以提供更高的性能和更快的执行时间
有没有办法改进以下查询?
MyQuery:
SELECT
u.`UserName`,
SUM(g.`Total`) totaltime
FROM
users u
INNER JOIN `users_graph` g
ON g.`UserName` = u.`UserName`
WHERE u.`GroupName` = 'Festival' AND g.`Time` > '1408995000'
GROUP BY u.`UserName`;
Samle Resut:
UserName GroupName totaltime
--------- ----------- ----------
test123 Festival 81
test332 Festival 19
test523 Festival 29
编辑:
表信息:
/*Table: users_graph*/
----------------------
/*Column Information*/
----------------------
Field Type Collation Null Key Default Extra
-------- ------------ ----------------- ------ ------ ------- --------------
Guid bigint(22) (NULL) NO MUL (NULL) auto_increment
Time int(11) (NULL) YES 0
UserName varchar(255) latin1_swedish_ci YES (NULL)
Down int(11) (NULL) YES 0
Up int(11) (NULL) YES 0
Total int(11) (NULL) YES 0
/*Index Information*/
---------------------
Table Non_unique Key_name Seq_in_index Column_name Collation Cardinality Sub_part Packed Null Index_type
----------- ---------- -------- ------------ ----------- --------- ----------- -------- ------ ------ ----------
users_graph 1 Guid 1 Guid A 5584276 (NULL) (NULL) BTREE
/*DDL Information*/
-------------------
CREATE TABLE `users_graph` (
`Guid` bigint(22) NOT NULL AUTO_INCREMENT,
`Time` int(11) DEFAULT '0',
`UserName` varchar(255) DEFAULT NULL,
`Down` int(11) DEFAULT '0',
`Up` int(11) DEFAULT '0',
`Total` int(11) DEFAULT '0',
KEY `Guid` (`Guid`)
) ENGINE=MyISAM AUTO_INCREMENT=5584277 DEFAULT CHARSET=latin1
/*Table: users*/
----------------
/*Index Information*/
---------------------
Table Non_unique Key_name Seq_in_index Column_name Collation Cardinality Sub_part Packed Null Index_type
------ ---------- ---------- ------------ ----------- --------- ----------- -------- ------ ------ ----------
users 0 PRIMARY 1 id A 21250 (NULL) (NULL) BTREE
users 0 UserName 1 UserName A 21250 (NULL) (NULL) BTREE
/*DDL Information*/
-------------------
CREATE TABLE `users` (
`id` bigint(21) NOT NULL AUTO_INCREMENT,
`UserName` varchar(32) NOT NULL DEFAULT '',
`Pass` varchar(32) NOT NULL DEFAULT '',
`GroupName` varchar(32) NOT NULL DEFAULT '',
) ENGINE=MyISAM AUTO_INCREMENT=27456 DEFAULT CHARSET=latin1
答案 0 :(得分:0)
必须索引搜索的列,例如,如果我想搜索大于等于time
的位置,我必须索引time
的列,然后是Mysql sort time
行。
索引列可以检索更快的结果。