我正計劃在PHP中構建報表引擎。許多報告將從包含許多JOIN(內部,左側)和許多WHERE條件的查詢中生成。在過去,我發現這些查詢有點慢。使用PHP和MySQL的報表引擎的建議
爲了優化這個過程,我想運行這些查詢(沒有過濾器)並將結果存儲在一個平坦的Archive MySQL表中。通過這種方式,我認爲查詢應該更快運行(以犧牲「實時」數據集爲代價)。
但是,我想知道是否沒有其他替代我的問題,如使用ElasticSearch或類似的東西?
讓我知道你在想什麼。
我正計劃在PHP中構建報表引擎。許多報告將從包含許多JOIN(內部,左側)和許多WHERE條件的查詢中生成。在過去,我發現這些查詢有點慢。使用PHP和MySQL的報表引擎的建議
爲了優化這個過程,我想運行這些查詢(沒有過濾器)並將結果存儲在一個平坦的Archive MySQL表中。通過這種方式,我認爲查詢應該更快運行(以犧牲「實時」數據集爲代價)。
但是,我想知道是否沒有其他替代我的問題,如使用ElasticSearch或類似的東西?
讓我知道你在想什麼。
所以你對平面文件的建議沒有任何意義,因爲從平面文件查詢肯定比從數據庫查詢要慢。關係數據庫的關鍵是提供更快的訪問。
爲了進一步幫助您,您需要爲您提供數據庫架構和查詢,以便我們可以分析是否有方法來優化它們。
您可以查看緩存,以便如果相同的查詢一次又一次地在相同的數據上運行,則可以從緩存中提取結果,而不是讓數據庫再次執行該操作。
我的意思是不是一個平面文件,而是一個平坦的桌子(更多像非規範化表)使用歸檔MySQL存儲引擎 – Sylvain 2014-11-06 20:30:11
歸檔引擎的文檔聲明它是「..存儲引擎用於存儲大量沒有索引的數據」。爲什麼你認爲沒有索引的表會更快地查詢你擁有索引的表?看起來你對MySQL的基礎知識非常困惑。我會建議做一些一般性的背景閱讀。關於dev.mysql.com的MySQL文檔是一個很好的開始。 – thatidiotguy 2014-11-06 20:32:36
正如我所說,我正處於規劃階段,我已經在某個地方讀過它,並認爲嘗試它是個好主意。我沒有解決任何問題;) – Sylvain 2014-11-06 20:38:32
對於統計信息,您可以使用像Vertica這樣的面向列的數據庫。 Hadoop用於大數據。爲數據集嘗試不同的數據庫並計算性能。
你有適當的索引你的表?您的查詢速度有多慢?使用像ElasticSearch這樣的系統肯定可以幫助提高性能,但它確實帶來了其他複雜性,例如數據遷移和同步 – 2014-11-06 20:18:07
「運行這些查詢WITHOUT過濾器」意味着什麼? – thatidiotguy 2014-11-06 20:18:17
我可以說的是...使用平面文件來存儲相同的結果,然後對這些數據進行處理並不是最好的選擇......從平面文件中DBMS是更好的方法,您需要的是優化您的表格和你的查詢,並有很多(可以由索引開始):http://dev.mysql.com/doc/refman/5.5/en/optimizing-innodb.html – 2014-11-06 20:19:45