簡體   English   中英

PHP MYSQL優化搜索多個查詢

[英]PHP MYSQL refine search multiple queries

我目前正在為汽車經銷商建立一個網站。 我想允許用戶優化類似於亞馬遜或ebay的搜索結果。 通過點擊縮小結果范圍的能力會很棒。 問題是我這樣做的方式現在有許多不同的查詢需要完成每個COUNT總計。

因此縮小結果的主要方法是:

  • 車輛類型
  • 使
  • 價格范圍
  • 全新/二手

目前我每次加載此頁面時都會進行5次查詢,以便在傳遞設定值時獲取結果數。

查詢1:

SELECT vehicle_type, COUNT(*) AS total FROM inventory
[[ Already Selected Search Parameters]]
GROUP BY vehicle_type
ORDER BY vehicle_type ASC

查詢2:

SELECT make, COUNT(*) AS total FROM inventory
[[ Already Selected Search Parameters]]
GROUP BY make
ORDER BY make ASC

查詢3,4,5 ......

有沒有辦法在一個查詢中執行此操作? 它更快嗎?

您的查詢似乎合理。

您可以使用UNION ALL在單個查詢中執行此操作:

SELECT 'vehicle_type' AS query_type, vehicle_type, COUNT(*) AS total
FROM inventory
...
GROUP BY vehicle_type

UNION ALL

SELECT 'make', make, COUNT(*) AS total FROM inventory ... GROUP BY make

UNION ALL

SELECT ... etc ...

這種性能優勢不會很大。

如果您發現這些查詢經常被解雇並且結果不會經常更改,您可能需要考慮緩存結果。 考慮使用像memcache這樣的東西。

有幾種方法可以按照數據倉庫的方式對數據進行排名,但是您在搜索術語中嘗試完成的操作稱為facets。 一個真正的搜索引擎(將與您提到的網站一起使用)執行此操作。

許多站點使用Lucene(基於Java)搜索引擎和SOLR來完成您所指的內容。 有一個名為ElasticSearch的新解決方案,它具有RESTful API並提供方面,但您需要安裝Java,ES,然后才能調用返回本機JSON的搜索引擎。

在MySQL中執行它而不需要這么多的連接可能需要額外的表和可能的觸發器並且變得復雜。 如果汽車經銷商不期望Cars.com流量(數百萬/天),那么您可能會在實際需要之前嘗試優化某些東西 您的遞歸查詢可能足夠快,並且您沒有報告存在實際問題或瓶頸。

使用JOIN語法: http//dev.mysql.com/doc/refman/5.6/en/join.html

或者,我認為你可以為此編寫MySQL函數。 您將在哪里傳遞搜索參數。 http://dev.mysql.com/doc/refman/5.1/en/create-function.html

要找到更快的地方,您應該進行自己的速度測試。 這有助於我在沒有加入的情況下更快地發現我的一些查詢。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM