首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >大型myisam表的MySQL优化

大型myisam表的MySQL优化
EN

Stack Overflow用户
提问于 2016-05-04 08:56:28
回答 1查看 3.4K关注 0票数 6
代码语言:javascript
运行
复制
OS=centos 6.7  [Dedicated server]
memory=15G      
cpu=Intel(R) Xeon(R) CPU E5-2403
mysql= V 5.1.73    

这里是一个MyISAM表,包含大约500万行数据。每5-6分钟插入大约3000名用户的数据(例如上传和下载速率、会话状态等)。

表信息:描述"radacct“

my.cnf

从mysql慢速查询日志中,最耗时的查询之一如下

代码语言:javascript
运行
复制
Query_time: 7.941773  Lock_time: 0.155912 Rows_sent: 1 Rows_examined: 5377
use freeradius;
SET timestamp=1461582118;
SELECT sum(acctinputoctets) as upload,
       sum(acctoutputoctets) as     download
    FROM radacct a 
    INNER JOIN (SELECT acctuniqueid, MIN( radacctid )     radacctid 
                   FROM radacct 
                   WHERE username='batman215'
                     and acctstarttime  between '2016-02-03 12:10:47'
                                            and '2016-04-25 16:46:01' 
                   GROUP BY   acctuniqueid) b 
        ON a.acctuniqueid = b.acctuniqueid 
       AND a.radacctid =    b.radacctid;

解释查询输出

当有许多用户试图查看他们消耗的带宽时,由于负载和IO太高,服务器无法满足请求。我能做些什么来进一步优化数据库吗?

表"radacct“中的索引

不使用\G解释查询

谢谢你

EN

回答 1

Stack Overflow用户

发布于 2016-12-08 23:09:30

代码语言:javascript
运行
复制
               WHERE username='batman215'
                 and acctstarttime  between ...

按照这个顺序请求INDEX(username, acctstarttime)

代码语言:javascript
运行
复制
    ON a.acctuniqueid = b.acctuniqueid 
   AND a.radacctid =    b.radacctid;

请求INDEX(acctuniqueid, radacctid) (按两种顺序)(或Ollie的覆盖指数)。

“每5-6分钟,就会插入大约3000个用户的数据”请求InnoDB而不是MyISAM。MyISAM会进行表锁,从而使“插入”干扰其他查询。http://mysql.rjweb.org/doc.php/myisam2innodb

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/37022941

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档