单机mariadb 查询优化

小娜君 2017-11-27 11:31:49
求大神帮忙分析,现有50w条记录,使用下面语句查询得到49w条,稍微做的附加条件是key(cpid) key(apmid) ,耗时8秒左右,降到2s需要做什么优化,,引擎用的myisam
SELECT
a.sip,
a.dip,
sum(c.server_turns_number)
FROM
communication_pair_201711182130_1m a
INNER JOIN basicrelation_201711182130_1m b ON a.cpid = b.cpid
INNER JOIN apm_201711182130_1m c ON b.apmid = c.apmid
GROUP BY
a.dip;

实在想不出来啥办法了

...全文
804 6 点赞 打赏 收藏 举报
写回复
6 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
小娜君 2018-02-25
也对,数据量大了,不会一次查看这么多的数据,但是如果我想做成分页显示,需要怎么做到,limit好像不行
  • 打赏
  • 举报
回复
小娜君 2017-11-29
哎 ,,没人鸟我,,始终被我改了表结构后优化到2秒所有了,原理还是没有想通,但是发现一个不合理的现象,主要是3个表都是有50w条记录,做笛卡尔乘积后肯定用到缓存,导致这里耗时,主要优化还是表结构太简单导致冗余数据过多,普通情况下产生记录时不会神一致的表记录数一致,简单的分表设计不能达到优化时间,比如上面单表才是50w 做了笛卡尔乘积好像成了50w*50w*50w了,,不知道分析得有道理吗
  • 打赏
  • 举报
回复
xmniemaosheng 2017-11-29
group by 字段的放去索引如何?
  • 打赏
  • 举报
回复
吉普赛的歌 2017-11-27
这你能有什么好办法?优化大部分情况就是加索引,优化SQL写法。 你这个总共 50万 就得输出 49万, 加索引用处也不大。 什么用户需要一次看 49 万条数据?
  • 打赏
  • 举报
回复
小娜君 2017-11-27
如何消除使用using temporary这个条件,,
  • 打赏
  • 举报
回复
小娜君 2017-11-27
引用
这你能有什么好办法?优化大部分情况就是加索引,优化SQL写法。 你这个总共 50万 就得输出 49万, 加索引用处也不大。 什么用户需要一次看 49 万条数据?
版主好,如果我不做分组求和,下面语句才耗时3秒左右,我做一个分组求和就要耗时8秒,没道理啊,。如果做了limit限制,limit也起不了多大作用,,因为做了连接 ,筛选,求和,limit的原理也是查询出所有的,然后才返回给客户所需要的数目,还有没有优化啊! SELECT a.sip, a.dip, c.server_turns_number FROM communication_pair_201711182130_1m a inner JOIN basicrelation_201711182130_1m b ON a.cpid = b.cpid inner JOIN apm_201711182130_1m c ON b.apmid = c.apmid
  • 打赏
  • 举报
回复
相关推荐
发帖
应用实例
加入

2.7w+

社区成员

MS-SQL Server 应用实例
申请成为版主
帖子事件
创建了帖子
2017-11-27 11:31
社区公告
暂无公告