2016-10-22 43 views
0

所以我有一個產品目錄的網站,這個頁面有4個產品滑塊,一個用於最近的產品,另一個用於暢銷書,第三個用於特別優惠。產品目錄的高效mysql查詢

爲每種類型的滑塊創建查詢會更好嗎?還是應該獲取所有產品,然後讓PHP對它們進行排序並將它們分離爲三個每個滑塊一個的distict數組?

目前我只是做

SELECT * FROM products WHERE deleted = 0 

進行測試。

+0

一般來說,數據庫的往返次數越少越好。有例外。但那應該是你的出發點。 – Strawberry

回答

0

幾乎總是最好的方式來優化查詢,以便它不僅返回實際需要的記錄,而且還只返回真正需要的記錄。所以,在你的情況下,這看起來像

SELECT id, description, col3 
FROM products 
WHERE deleted = 0 
AND -- conditions that make it fit in the proper slider 

的原因是,它的成本也資源(時間和帶寬)傳輸設置轉移到處理程序和處理時間來評估個體的回報記錄的結果,因此查詢的「成本」將隨着表大小而變化,而不是實際需要的數據集的大小。

只是一個例子,但讓我們假設您想要創建一個前10名賣家名單,並且您的故事中有100個項目。您將檢索100條記錄並保留10個。沒什麼大不了的。現在,你的店鋪增長了,你有100000件商品。對於你的前10名,你必須翻閱所有論文並丟棄99990條記錄。 99990記錄您將有數據庫服務器讀取並傳輸給您,並且99990記錄您必須單獨檢查以查看它是否是前10個項目。

由於這種類型的查詢將經常執行,因此通過索引搜索列來優化它們也是一個好主意,因爲數據庫服務器中的索引搜索速度更快。

我說:「幾乎總是」因爲有罕見箱子,你也很難表達SQL你真正需要的,或者你需要使用相當奇特的技術,如查詢提示來強制數據庫引擎執行以合理有效的方式查詢您的查詢。但是這些情況相當少見,而且當查詢沒有按預期執行時,通過一些分析,您將在大多數情況下改進其性能 - 查看關於SO的查詢優化的幾千個問題。

+1

雖然這裏沒有什麼技術上的錯誤,並且它充滿了有用和真實的信息 - 我覺得它完全忽略了這一點。 – Strawberry

+0

@Stawberry與問題中的有限細節它是我能做的最好的 - 我試圖1)解釋與這種「批量請求」相關的擴展問題2)經常使用的查詢應該由索引和3 )如果db似乎表現不佳,則需要分析發生了什麼,大多數性能問題可以使用標準方法或改進的查詢來解決。這至少應該讓OP開始他們的研究。你覺得我錯過了什麼重點? – fvu

+0

呃,這個問題。無論是執行一個查詢還是執行一個查詢,這個更高貴 – Strawberry