簡體   English   中英

PHP MySQL:對於每個查詢,多次從同一個表中選擇沒有數據庫負載?

[英]PHP MySQL: Select from same table multiple times without database load for each query?

我將首先嘗試描述我的情況和問題,然后問問題。

情況和問題的描述

所以我正在使用phpBB論壇並為它編程。 我想自己編寫代碼,我需要在數據庫上運行多個select查詢來檢查幾件事。 其中一些更復雜,將有超過一百個語句,所以我不想放慢我的網站速度。 我想在后台通過Ajax檢查這些選擇異步,並將結果存儲在准備檢索的緩存表中。 這不是大問題。

我想到的是所有這些查詢的數據庫加載原因。 如果連接了100個用戶並且經常運行超過100個查詢,則這非常巨大。 我不知道對性能的影響,但我不想冒險。 其中許多查詢只是具有不同WHERE子句的同一個表中的SELECT。 所以我想是否可以在沒有任何參數的情況下選擇整個表一次,並且該表上的每個選擇查詢都只訪問該表的緩存版本。 這也會導致更有意義的結果,因為所有選擇都使用相同的值。 我知道可以將查詢存儲在一個二維的php數組中,但是我將丟失所有很酷的MySQL函數和我需要的子句,這將是更多的工作。

所以,很多文字,希望你讀它。 現在我的問題:

是否可以緩存MySQL表一次並在同一個php文檔調用中為每個后續查詢使用此緩存? 它會節省性能嗎?



編輯://
我想我應該多解釋一下,所以我不想誤解我想做什么。 為了簡化問題,我可以說我想在s​​tackoverflow上做類似於徽章的事情。 因此,如果用戶加載網站,我需要檢查他是否有一些新的徽章,是否符合標准,等等。我經常使用相同的表進行此檢查。 這就是為什么我想詢問是否可以緩存表格的問題。

為什么我檢查siteload,而不是如果用戶執行操作他將獲得徽章? 有兩個原因:首先許多徽章是在一段時間后獲得的,或者如果其他用戶執行操作,而不是您自己。 此外,它非常混亂和復雜,並且很難設法在需要它們的地方在phpBB的所有文件中添加> 100個查詢。 我認為這將是糟糕的設計。 所以我想將我的代碼分組並封裝它。

我希望你使用MySQL作為數據庫系統。

您可以在Select with SQL_CACHE使用,其余的將自動運行。 http://dev.mysql.com/doc/refman/5.1/en/query-cache-in-select.html

查詢緩存存儲SELECT語句的文本以及發送到客戶端的相應結果。 如果稍后收到相同的語句,則服務器將從查詢緩存中檢索結果,而不是再次解析和執行語句。 查詢緩存在會話之間共享,因此可以發送由一個客戶端生成的結果集以響應由另一個客戶端發出的相同查詢。

查詢緩存在您擁有不經常更改且服務器接收許多相同查詢的表的環境中非常有用。 這是許多基於數據庫內容生成許多動態頁面的Web服務器的典型情況。

如果您的表數據沒有經常更改,那么您可以緩存查詢結果,為此您可以使用各種技術。 例如,您可以使用solr,它會根據您的要求將您的100個查詢結果緩存一段特定的時間,例如10分鍾或1小時,並且在特定時間之后您需要再次緩存數據。

通過這種方法假設您已將數據緩存1小時,那么每小時將執行100次查詢,並且將從緩存中提取休息時間查詢結果。

暫無
暫無

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

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