【问题标题】:PHP, How to write faster query for updating large objectPHP,如何编写更快的查询来更新大对象
【发布时间】:2017-04-16 02:47:16
【问题描述】:

我有以下查询,它非常完美。它允许我从我的数据库中获取用于绘制图表的分数,用于大量输入时间范围和选项。

$get_net_sql=   "SELECT  nic_name,
        AVG(bytes_sent) as down_speed,
        AVG(bytes_recv) as up_speed,
        unix_timestamp
    FROM (  SELECT  nic_name, bytes_sent, bytes_recv,
                (".
                  $sql_sample_size.
                  "*ROUND(unix_timestamp/". $sql_sample_size. ")
                ) As unix_timestamp
            FROM  tbl_network_stats
            WHERE  timestamp>(NOW() - INTERVAL ". $time. " ". $sql_unit. ")
         ) AS sub_table
    GROUP BY  unix_timestamp, nic_name
    ORDER BY  unix_timestamp, nic_name DESC;";

当然,当您处理数天或数周的数据时,这是一个缓慢的查询。所以我想做的是用这个查询绘制图形(在画布上),并更新运行图形间隔的 json 对象,每秒钟查询一次的速度要快得多。

我已经加入工作,但我找不到上述查询的正确更快版本...现在写下这是我得到的:

$get_net_sql = "SELECT  nic_name,
        bytes_sent as down_speed,
        bytes_recv as up_speed,
        unix_timestamp
    FROM  tbl_network_stats
    WHERE  unix_timestamp = 
        (  SELECT  unix_timestamp
            FROM  tbl_network_stats
            ORDER BY  unix_timestamp DESC
            LIMIT  1
        )";

我在这里要解决的真正问题是,当我每隔一秒使用第一个查询不断更新我的图表时,它会实时更新,这很完美,但每次都会抓取所有新数据并且速度很慢,我的处理器由于这个原因以及 3 个针对网络和 ram 趋势数据的类似查询,增长了 25%。那么,如果他们消耗 25% 的 cpu 来完成这些花哨的图表,谁会愿意观看呢!

我正在寻求帮助或替代方案时想到的解决方案是在页面加载时运行第一个查询,并每秒加入一个更快的查询。

谢谢你,Maango,看看索引有什么不同(我本可以在这个问题上花一个月的时间,非常感谢,如此明显但隐藏了一个解决方案):

【问题讨论】:

  • 坐标轴上的值是多少?
  • 我是 rick james biotch! % 与时间,基于所选时间范围的动态 x 轴

标签: php mysql sql performance


【解决方案1】:

我有两个建议:

首先将您的子查询更改为:

(SELECT max(unix_timestamp) FROM tbl_network_stats)

这可能会有所不同,但我没有你的数据来测试它。

其次,添加索引:

ALTER TABLE tbl_network_stats ADD INDEX ux_ts (unix_timestamp);

这将加快任何ORDER BY 或其他需要查找值的子句。

【讨论】:

  • 你就是Manngo!看看屏幕截图,索引救了我的命!真的,我花了一个月的时间才意识到,非常感谢!现在我要试试你的子查询建议,也许让它更快……你说 MAX 可能比第二个查询中的 ORDER BY 子句更快?
  • @user3656612 我没有测试过我自己,但我的猜测是,尤其是在索引数据的情况下,找到最大值应该比对整个表进行排序更容易。这只是一个猜测,我认为这不会有很大的不同。顺便说一句,如果您对答案感到满意,您介意接受吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-06-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-11-08
  • 1970-01-01
相关资源
最近更新 更多