当前位置: 首页 > 面试题库 >

优化大表(75M +行)上的简单mysql选择

支铭晨
2023-03-14
问题内容

我有一个统计表,该表的增长速度非常快(每天约有2500万行),我希望针对选择进行优化,该表可容纳内存,并且服务器具有大量备用内存(32G,表为4G)。

我的简单汇总查询是:

EXPLAIN select FROM_UNIXTIME(FLOOR(endtime/3600)*3600) as ts,sum(numevent1) as success , sum(numevent2) as failure from stats where endtime > UNIX_TIMESTAMP()-3600*96 group by ts order by ts;
+----+-------------+--------------+------+---------------+------+---------+------+----------+----------------------------------------------+
| id | select_type | table        | type | possible_keys | key  | key_len | ref  | rows     | Extra                                        |
+----+-------------+--------------+------+---------------+------+---------+------+----------+----------------------------------------------+
|  1 | SIMPLE      | stats        | ALL  | ts            | NULL | NULL    | NULL | 78238584 | Using where; Using temporary; Using filesort |
+----+-------------+--------------+------+---------------+------+---------+------+----------+----------------------------------------------+

统计信息是一个innodb表,在结束时间上有一个正常的索引。

注意:我确实计划添加汇总表,但是目前这是我所坚持的,并且我想知道是否有可能在没有其他应用程序代码的情况下对其进行修复。


问题答案:

我一直在做本地测试。请尝试以下方法:

alter table stats add index (endtime, numevent1, numevent2);

并删除order by它,因为它应该是隐式的group by(我猜解析器order by在这种情况下只会忽略,但以防万一:)



 类似资料:
  • 我有一个需要50秒的查询 security_tasks中的记录=841321 relations中的记录=234254 我能做些什么让它快一点,比如快1秒或2秒 有什么想法吗?

  • 本文向大家介绍MySQL中对表连接查询的简单优化教程,包括了MySQL中对表连接查询的简单优化教程的使用技巧和注意事项,需要的朋友参考一下 在MySQL中,A LEFT JOIN B join_condition执行过程如下: · 根据表A和A依赖的所有表设置表B。 · 根据LEFT JOIN条件中使用的所有表(除了B)设置表A。 · LEFT JOIN条件用于确定如何从表B搜索行。(换句话说,不

  • 本文向大家介绍php+mysql查询优化简单实例,包括了php+mysql查询优化简单实例的使用技巧和注意事项,需要的朋友参考一下 本文实例分析了php+mysql查询优化的方法。分享给大家供大家参考。具体分析如下: PHP+Mysql是一个最经常使用的黄金搭档,它们俩配合使用,能够发挥出最佳性能,当然,如果配合Apache使用,就更加Perfect了. 因此,需要做好对mysql的查询优化,下面

  • 本文向大家介绍对MySQL子查询的简单改写优化,包括了对MySQL子查询的简单改写优化的使用技巧和注意事项,需要的朋友参考一下 使用过oracle或者其他关系数据库的DBA或者开发人员都有这样的经验,在子查询上都认为数据库已经做过优化,能够很好的选择驱动表执行,然后在把该经验移植到mysql数据库上,但是不幸的是,mysql在子查询的处理上有可能会让你大失所望,在我们的生产系统上就由于碰到了这个问

  • 本文向大家介绍如何进行大表优化?相关面试题,主要包含被问及如何进行大表优化?时的应答技巧和注意事项,需要的朋友参考一下 当MySQL单表记录数过大时,数据库的CRUD性能会明显下降,一些常见的优化措施如下: 1. 限定数据的范围 务必禁止不带任何限制数据范围条件的查询语句。比如:我们当用户在查询订单历史的时候,我们可以控制在一个月的范围内; 2. 读/写分离 经典的数据库拆分方案,主库负责写,从库

  • 问题内容: 我有一个在InnoDB引擎上运行的MySQL表,该表具有大约2,250,000行,其表结构如下: 第一列保存一个从0到2.25M的简单增量值,而&分别保存一个点的一组以十进制度表示的纬度和经度坐标。 这是一个只读表。不会添加其他行,并且唯一需要针对它运行的查询如下: …冒号后面的值是PHP PDO占位符。本质上,此查询的目标是获取表中当前位于Google Maps窗口视口中的所有坐标点