繁体   English   中英

PHP,如何编写更快的查询以更新大对象

[英]PHP, How to write faster query for updating large object

我有以下查询,这是非常完美的。 它允许我从数据库中获取输入点,以获取各种输入时间范围和选项。

$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
        )";

我要在这里解决的真正问题是,当我每秒每秒用第一个查询不断更新图表以使其实时更新时,这是完美的,但每次都会捕获所有新数据并且很慢,我的处理器处于运行状态25%归因于此,并且针对网络和ram趋势数据进行了3个类似的查询。 因此,如果他们花了25%的CPU来做这些花哨的图表,谁愿意看!

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

谢谢Maango,看看索引有什么不同(我可能在这个问题上花了一个月的时间,非常感谢,如此明显,但如此埋藏了一个解决方案): 在此处输入图片说明

我有两个建议:

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

(SELECT max(unix_timestamp) FROM tbl_network_stats)

这可能会有所不同,但是我没有您的数据可以对其进行测试。

其次,添加一个索引:

ALTER TABLE tbl_network_stats ADD INDEX ux_ts (unix_timestamp);

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM