2014-11-24 76 views
-1

我試圖從數據庫打印記錄,一切正常,但它非常慢.. 使用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行需要打印。我用存儲過程嘗試過也很慢。 任何幫助或建議,非常感謝。

+0

對於你可以使用分頁,那些表上的索引? – Daan 2014-11-24 13:01:48

+0

您是否嘗試過分析以查看代碼的所有部分實際上都在使用哪一部分?如果它是實際的數據庫查詢,那麼你的表有哪些索引? – 2014-11-24 13:02:02

+0

那麼,查詢本身是不是很慢,只是表的準備? – Strawberry 2014-11-24 13:05:18

回答

1

索引用於加速在數據庫中的搜索。爲索引

文檔:http://dev.mysql.com/doc/refman/5.0/en/mysql-indexes.html

的指標來有效找到在您的查詢匹配的一些列的所有記錄,然後穿行只有表的子集找到確切匹配您所選擇的。如果在WHERE子句中沒有任何列的索引,那麼SQL服務器必須遍歷整個表並檢查每一行以查看它是否匹配,這在大表上可能是一個緩慢的操作

索引也可以是一個UNIQUE索引,這意味着您不能在該列中具有重複值,或者在某些存儲引擎中定義PRIMARY KEY來定義數據庫文件中該值的存儲位置。

+0

感謝您的評論。我通過索引和表格分頁解決了這個問題。它現在運作良好 – user3651819 2014-11-24 13:30:41

+0

@ user3651819,很高興我能幫忙,請你接受我的答案作爲你的問題的解決方案? – 2014-11-24 13:31:57

+0

我現在有表格,其中有18000條記錄,我使用的索引和分頁打印非常緩慢 – user3651819 2014-11-27 10:16:41

2

索引用於連接的列。這可以使用PHPMyAdmin輕鬆完成 - 只需登錄,查找表,轉到結構並單擊用於連接的行(每個ID)上的「索引」。

連接不應該沒有索引運行。正如你所看到的,它會讓它們變慢。

乾杯!

1

您還可以使用EXPLAIN(),以幫助您更好地瞭解您的查詢,如果它使用索引:

13.8.2 EXPLAIN Syntax

上面確實也可以在這裏找到了

簡短解釋:

Explaining MySQL's EXPLAIN

最後一件事,這些表有多大?

+0

一張表有18000條記錄,現在我又遇到了打印問題,我已經使用了索引和分頁 – user3651819 2014-11-27 10:15:46