请帮忙参考下怎么优化下面count(*)语句?(mysql)

zxw394 2016-06-30 10:15:59
现有2张表
1,systemEventMapping--(systemEvent与user的中间表)
2,systemEvent
每张表差不多快500w的数据,现在使用联合查询count时,查询时间太长,有半分钟,就想问下怎么优化,下面是查询的截图?







...全文
151 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
zjcxc 2016-07-01
  • 打赏
  • 举报
回复
count(*) 和 count(字段) 的意义不完全相同 如果有合适的索引能够辅助 count, mysql 不会笨到不用吧
致命的西瓜 2016-06-30
  • 打赏
  • 举报
回复
我在本地试了下是一样的效果,sql我已经没办法优化了,还是请大牛来看看吧
zxw394 2016-06-30
  • 打赏
  • 举报
回复
引用 5 楼 wangjian0228 的回复:
[quote=引用 3 楼 zxw394 的回复:] [quote=引用 1 楼 wangjian0228 的回复:] sem.SysEvent字段是否有索引,执行计划的ref不是最好的方式
有的 [/quote] show index from systemEventMapping; 看他的sysevent字段[/quote] mysql> show index from SystemEventMapping; +--------------------+------------+-----------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+---------------+ | Table | Non_unique | Key_name | Seq_in_index | Column_name | Collation | Cardinality | Sub_part | Packed | Null | Index_type | Comment | Index_comment | +--------------------+------------+-----------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+---------------+ | SystemEventMapping | 0 | PRIMARY | 1 | id | A | 4189854 | NULL | NULL | | BTREE | | | | SystemEventMapping | 1 | logo_sys | 1 | systemEvent | A | 4189854 | NULL | NULL | | BTREE | | | | SystemEventMapping | 1 | logo_user | 1 | user | A | 15 | NULL | NULL | YES | BTREE | | | +--------------------+------------+-----------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+---------------+ 3 rows in set (0.15 sec)
致命的西瓜 2016-06-30
  • 打赏
  • 举报
回复
引用 3 楼 zxw394 的回复:
[quote=引用 1 楼 wangjian0228 的回复:] sem.SysEvent字段是否有索引,执行计划的ref不是最好的方式
有的 [/quote] show index from systemEventMapping; 看他的sysevent字段
ACMAIN_CHM 2016-06-30
  • 打赏
  • 举报
回复
sem 索引贴出。
引用
以文本方式贴出 不要贴截图 explain select ... show index from .. 以供分析。
zxw394 2016-06-30
  • 打赏
  • 举报
回复
引用 1 楼 wangjian0228 的回复:
sem.SysEvent字段是否有索引,执行计划的ref不是最好的方式


有的
zxw394 2016-06-30
  • 打赏
  • 举报
回复
引用 楼主 zxw394 的回复:
现有2张表
1,systemEventMapping--(systemEvent与user的中间表)
2,systemEvent
每张表差不多快500w的数据,现在使用联合查询count时,查询时间太长,有半分钟,就想问下怎么优化,下面是查询的截图?




有的
致命的西瓜 2016-06-30
  • 打赏
  • 举报
回复
sem.SysEvent字段是否有索引,执行计划的ref不是最好的方式
zhs471420954 2016-06-30
  • 打赏
  • 举报
回复
https://segmentfault.com/q/1010000000657819
zhs471420954 2016-06-30
  • 打赏
  • 举报
回复
不要count(*),可以count(索引字段)试试
ACMAIN_CHM 2016-06-30
  • 打赏
  • 举报
回复
SystemEventMapping表中4189854 条记录中仅有15个不同的logo_user ,这样平均每个logo_user 有279323条符合条件的记录,快不起来。除非在硬件上进行优化。另外可以尝试一下用logo_user 做分区表,或者分表,但提高有限。
zxw394 2016-06-30
  • 打赏
  • 举报
回复
引用 7 楼 wangjian0228 的回复:
我在本地试了下是一样的效果,sql我已经没办法优化了,还是请大牛来看看吧
问一下linux下有这样压力测试数据查询时间的软件吗?
zxw394 2016-06-30
  • 打赏
  • 举报
回复
引用 7 楼 wangjian0228 的回复:
我在本地试了下是一样的效果,sql我已经没办法优化了,还是请大牛来看看吧
谢谢你

56,679

社区成员

发帖
与我相关
我的任务
社区描述
MySQL相关内容讨论专区
社区管理员
  • MySQL
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧