2010-10-21 123 views
0

PHP:我有一個簡單的分頁腳本,它使用兩個查詢。首先MySQL緩慢查詢,快速查詢子查詢

MySQL:使用服務器版本4.1.25 - 我有兩個表(產品,類別)與item_num字段綁在一起檢索產品通過類別和都有唯一的ID字段索引和自動遞增。它們都是MyISAM類型。

查詢#1:SELECT COUNT(*) FROM rituals_collections, rituals_products WHERE rituals_collections.item_num = rituals_products.item_num AND rituals_collections.collection = '$currentCollection' $queryString ORDER BY rituals_products.id

這應該使用這些過濾器只搶了創紀錄的數量,使得它並不需要獲得數據以及導致更長的加載時間。 $ queryString僅查找URL中的任何類別或子類別,如果它們在那裏,則將其添加到過濾進程中。 $ currentCollection是用戶通過下拉菜單選擇的內容。

查詢#2:SELECT DISTINCT * FROM rituals_collections, rituals_products WHERE rituals_collections.item_num = rituals_products.item_num AND rituals_collections.collection = '$currentCollection' $queryString ORDER BY rituals_products.id LIMIT $offset, $rowsperpage

我覺得這是瓶頸在哪裏發生的事情。我需要DISTINCT因爲管理員不能消除他的重複。查詢的其餘部分與LIMIT$ offset的例外相同,$ rowsperpage這限制了產品的分頁目的。

數據庫截圖

我有截圖可用,但因爲我是一個新用戶,我不能張貼呢。我想可以提供給他們。

最後說明:我已經包括了整個腳本的位置:http://pastie.org/1239167兩個表的設置位於因爲第三方腳本我的客戶端使用,是不可避免的事情是這樣的。而且,這關係到MODx CMS,但應該非常簡單。

如果有人能幫助,我會永遠感激。謝謝!

+0

我覺得你正在用查詢查詢每一列上的DISTINCT。你能隔離一個需要區分的列嗎? – 2010-10-21 21:19:19

+0

我刪除了DISTINCT,但仍需要很長時間。加載3,000條記錄需要20秒,而加載任何子類別的時間不到一秒。我是否應該在第一個查詢中不使用mysql_num_rows,如果我只是想要計數?如果是這樣,將有什麼替代方案? – Monkeybones 2010-10-21 21:23:25

回答

0

原來我在第二個分頁查詢中有一個不必要的mysql_num_rows,這大大減少了加載時間。現在,這幾乎是即時的。