【问题标题】:Retrieve large number of records检索大量记录
【发布时间】:2016-12-25 03:10:37
【问题描述】:

我正在尝试检索大量数据并将它们打印在表格中。在一张表中,我需要在表中打印大约 5000 条记录,而在一张表中,我有大约 10000 条记录。 我正在使用带有分页的 DataTable,并且在表中打印记录的时间非常慢。 我也尝试过创建存储过程,时间是一样的。

非常感谢任何帮助或建议。

这是我正在使用的代码

$sql= "SELECT a.Id, a.Datum, a.Materijal, a.VrstaIzlaza, a.BrojIzlaza, a.Pocetno, a.Krajnje, a.Promet, b.OdjelNaziv, c.LokacNaziv
FROM jos_ib_promet_reprm_2014 a 
LEFT JOIN odjeli b ON a.Odjel=b.OdjelId  
LEFT JOIN sredstva c ON a.Poslovnica=c.LokacijaId order by a.Id desc"; 

$q = $conn->query($sql);

<table id="example1" class="table table-bordered table-striped">
    <thead>
         <tr>
            <th>Id</th>
            <th>Materijal</th>
            <th>Izlaz</th>
            <th>Br. dokumenta </th>
            <th>Datum</th>
            <th>Pocetno stanje</th>
            <th>Krajnje stanje</th>
            <th>Promet</th>
            <th>Odjel</th>
            <th>Poslovnica</th>
        </tr>
    </thead>
    <tbody>
    <?php while ($r = $q->fetch()): ?>
    <tr>
        <td><?=$r['Id'] ?></a> </td>
        <td>R-<?=$r['Materijal'] ?></td>
        <td><?=$r['VrstaIzlaza'] ?></td>
        <td><?=$r['BrojIzlaza']?></td>
        <td><?=$r['Datum'] ?></td>
        <td><?=$r['Pocetno'] ?></td>
        <td><?=$r['Krajnje'] ?></td>
        <td><?=$r['Promet'] ?></td>
        <td><?=$r['OdjelNaziv'] ?></td> 
        <td><?=$r['LokacNaziv'] ?></td>
    </tr>
    </tbody>
</table>

【问题讨论】:

  • 使用延迟加载技术,即仅在需要显示数据时通过 AJAX 获取数据。耗时的部分来自您长时间运行的 MYSQL 查询。
  • 我在您的代码中看不到任何“分页”逻辑...您可能正在打印完整的结果表... :-(
  • 在你的 SQL 查询中使用LIMIT 选择不超过 50 条,也许 100 条记录并实现分页系统。一次读几千本是个坏主意
  • @Mysteryos 是对的。此外,如果在其永恒中运行查询对您的成功至关重要,您可以尝试使用 EXPLAIN 关键字优化它(有关更多详细信息,请参阅herehere)。 (找出占用你大部分执行时间的部分,并想办法改进它们。)
  • 我不同意上面的 cmets。慢的不是查询,而是渲染结果所花费的时间。

标签: php mysql pdo


【解决方案1】:

我认为你应该使用一些 ajax 作为帮助。您每页打印出 20 条记录,当您在页面上向下移动时,您向服务器发送另一个查询以加载另外 20 条记录。当您需要处理大量记录时,它非常有效。

【讨论】:

    【解决方案2】:

    在 mysqli::query 中有一个可选标志来解决这样的问题。它被称为 MYSQLI_STORE_RESULT。所以你的代码应该看起来很休闲。

    $q = $conn->query($sql,MYSQLI_STORE_RESULT);
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2010-11-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多