从数据库打印记录非常慢

时间:2014-11-24 13:00:30

标签: php mysql

我正在尝试从数据库打印记录,一切都很好,但速度很慢.. 使用Bootstrap框架。

查询

 $sql="
SELECT a.ArtId
     , a.ArtSifra
     , a.ArtNaziv
     , a.ArtMinKolic
     , a.ArtKategorija
     , a.ArtAktivan
     , a.ArtRoditelj
     , a.ArtStanjeSa
     , a.ArtStanjeBL
     , b.JmNaziv
     , c.KatNaziv 
  FROM artikli a
  LEFT 
  JOIN mjera b
    ON a.ArtMjera = b.JmId
  LEFT 
  JOIN kategorija c
    ON a.ArtKategorija = c.KatId
 ORDER 
    BY a.ArtKategorija ASC
";

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

创建表

 <thead>
    <tr>
    <th data-field="state" data-checkbox="true"></th>
    <th data-field="id" data-sortable="true">Id</th>
    <th data-field="sifra" data-sortable="true">Sifra</th>
    <th data-field="name" data-sortable="true">Naziv</th>
    <th data-field="mjera" data-sortable="true">Jed. mjere</th>
    <th data-field="stanjesa" data-sortable="true">Stanje </th>
    <th data-field="stanjebl" data-sortable="true">Stanje 2</th>
    <th data-field="minkolicina" data-sortable="true">Min</th>
    <th data-field="kategorija" data-sortable="true">Kategorija</th>
    <th data-field="status" data-sortable="true">Status</th>
    </tr>
    </thead>

然后我通过while循环

获取结果
<?php while ($r = $q->fetch()): ?>
<tbody>
<td data-field="checkbox" data-checkbox="true"> </td>
<td><?=$r['ArtId'] ?> </td>
<td><?=$r['ArtSifra'] ?></td>
<td><?=$r['ArtNaziv'] ?></td>
<td><?=$r['JmNaziv'] ?></td>
<td><?=$r['ArtStanjeSa']?></td>
<td><?=$r['ArtStanjeBL'] ?></td>
<td><?=$r['ArtMinKolic'] ?></td>
<td><?=$r['KatNaziv'] ?></td>
<td><?=$r['ArtAktivan'] ?></td>
</tr>
<?php endwhile; ?>
</tbody>

我想知道有没有办法让结果更快?在此表中,我有大约1000行需要打印。我尝试过存储过程也很慢。 非常感谢任何帮助或建议。

3 个答案:

答案 0 :(得分:2)

索引用于连接的列。这可以使用PHPMyAdmin轻松完成 - 只需登录,找到表格,进入结构并点击&#34;索引&#34;在用于连接的行上(每个ID)。

不应在没有索引的情况下运行联接。正如你所看到的那样,它会让它们慢下来。

干杯!

答案 1 :(得分:1)

索引用于加速数据库中的搜索。

索引编制的文档:http://dev.mysql.com/doc/refman/5.0/en/mysql-indexes.html

索引用于高效查找与查询中某些列匹配的所有记录,然后仅遍历表的该子集以查找您选择的完全匹配。如果在WHERE子句中的任何列上没有索引,那么SQL服务器必须遍历整个表并检查每一行以查看它是否匹配,这可能是一个缓慢的操作 on大桌子。

索引也可以是UNIQUE索引,这意味着您不能在该列中具有重复值,或者PRIMARY KEY在某些存储引擎中定义数据库文件中存储值的位置。

答案 2 :(得分:1)

你也可以使用EXPLAIN()来帮助你更好地理解你的查询以及它是否使用索引:

13.8.2 EXPLAIN Syntax

上述内容的简短说明也可以在这里找到:

Explaining MySQL's EXPLAIN

最后一点,这些表有多大?