【问题标题】:Mysqli results memory usageMysqli 结果内存使用情况
【发布时间】:2011-02-19 01:13:38
【问题描述】:

为什么这个查询中的内存消耗随着内部指针在循环中前进而继续上升?如何让它更高效、更精简?

$link = mysqli_connect(...);
$result = mysqli_query($link,$query); // 403,268 rows in result set
while ($row = mysqli_fetch_row($result)) 
{
    // print time, (get memory usage), -- row number
}
mysqli_free_result();
mysqli_close($link);
/*
06:55:25 (1240336) -- Run query
06:55:26 (39958736) -- Query finished
06:55:26 (39958784) -- Begin loop
06:55:26 (39960688) -- Row 0
06:55:26 (45240712) -- Row 10000
06:55:26 (50520712) -- Row 20000
06:55:26 (55800712) -- Row 30000
06:55:26 (61080712) -- Row 40000
06:55:26 (66360712) -- Row 50000
06:55:26 (71640712) -- Row 60000
06:55:26 (76920712) -- Row 70000
06:55:26 (82200712) -- Row 80000
06:55:26 (87480712) -- Row 90000
06:55:26 (92760712) -- Row 100000
06:55:26 (98040712) -- Row 110000
06:55:26 (103320712) -- Row 120000
06:55:26 (108600712) -- Row 130000
06:55:26 (113880712) -- Row 140000
06:55:26 (119160712) -- Row 150000
06:55:26 (124440712) -- Row 160000
06:55:26 (129720712) -- Row 170000
06:55:27 (135000712) -- Row 180000
06:55:27 (140280712) -- Row 190000
06:55:27 (145560712) -- Row 200000
06:55:27 (150840712) -- Row 210000
06:55:27 (156120712) -- Row 220000
06:55:27 (161400712) -- Row 230000
06:55:27 (166680712) -- Row 240000
06:55:27 (171960712) -- Row 250000
06:55:27 (177240712) -- Row 260000
06:55:27 (182520712) -- Row 270000
06:55:27 (187800712) -- Row 280000
06:55:27 (193080712) -- Row 290000
06:55:27 (198360712) -- Row 300000
06:55:27 (203640712) -- Row 310000
06:55:27 (208920712) -- Row 320000
06:55:27 (214200712) -- Row 330000
06:55:27 (219480712) -- Row 340000
06:55:27 (224760712) -- Row 350000
06:55:27 (230040712) -- Row 360000
06:55:27 (235320712) -- Row 370000
06:55:27 (240600712) -- Row 380000
06:55:27 (245880712) -- Row 390000
06:55:27 (251160712) -- Row 400000
06:55:27 (252884360) -- End loop
06:55:27 (1241264) -- Free */

【问题讨论】:

    标签: mysql mysqli memory-management


    【解决方案1】:

    AFAIK 一些 mysqli 实现确实保留了与列的最大大小一样多的内存。因此,即使文本字段中有 1Kb,它也会保留 64k,而不是 1。

    我不太擅长,不过你可以试试mysqli_unbuffered_query(如果有的话)

    或者,作为最佳选择 - 在特定页面上仅选择您需要的行和列

    【讨论】:

    •  我替换了: $result = mysqli_query($link,$query);使用这两个: mysqli_real_query($link,$query); $result = mysql_use_result($link);这解决了我的记忆问题。谢谢你的提示。 
    • @Poe 很高兴你解决它 :) 他们使用backticks 来格式化这里的代码
    • 检查 sql 中的数据类型。您的回答为我指明了正确的方向。 Mysqli 分配了大量内存,因为我选择了错误的数据类型...
    猜你喜欢
    • 2017-09-07
    • 1970-01-01
    • 2020-11-27
    • 2020-09-13
    • 2015-02-03
    • 2012-05-30
    • 2021-02-26
    • 2010-10-24
    • 2015-06-14
    相关资源
    最近更新 更多