2008-10-03 78 views
8

在PHP中,速度更快;使用include('somefile.php')或使用簡單的SELECT查詢查詢MySQL數據庫以獲取相同的信息?速度更快;包括另一個文件或查詢PHP中的MySQL數據庫?

例如,假設您有一個JavaScript自動填充搜索字段,需要使用3,000個字詞進行匹配。使用include從另一個文件中讀取這些術語還是使用簡單的SELECT查詢從MySQL數據庫中讀取它們更快?

編輯:這是假設我要包含的數據庫和文件與我的代碼位於同一本地計算機上。

+0

請注意,讀取數據是一回事,但與該數據匹配是另一個重要性能明智的步驟。所以你的問題可能不會邀請你需要的答案。 – bart 2015-07-19 18:03:50

回答

14

這取決於。如果您的文件存儲在本地服務器中,並且數據庫安裝在另一臺計算機上,則包含該文件的速度越快。

Buuuuut,因爲它取決於你的系統,它可能不是真的。我建議你做一個PHP測試腳本和命令行運行它的100倍,並通過HTTP重複測試(使用捲曲)

例子:

use_include.php

<?php 

    start = microtime(true); 

    include('somefile.php'); 

    echo microtime(true)-start; 

?> 

use_myphp。PHP

<?php 

    start = microtime(true); 

    __put_here_your_mysql_statements_to_retrieve_the_file__ 

    echo microtime(true)-start; 

?> 
-3

我完全不知道,但在我的確信使用MySQL,即使可以更慢,如果內容是動態的,應該使用。但我很確定它更快,對於大內容,使用include。

0

只要該文件不是太大肯定有和你最終使用在這種情況下,數據庫將被推薦

2

太多的內存也很難/不可能給出一個確切的答案,因爲有太多未知的變量 - 如果文件系統安裝在位於世界另一端的NFS上怎麼辦?或者你有內存中的整個MySQL數據庫。數據庫的大小也應該考慮在內。

但是,在更多的答案註釋中,如果索引良好,數據庫結構/規範化良好以及不太花哨/複雜的查詢,則MySQL可以更快地得到。 I/O操作總是很昂貴(讀取:慢),而如前所述,整個數據集已被MySQL緩存在內存中。另外,我想你還想用這些包含文件進行進一步的字符串處理,這使得事情變得更加麻煩 - 我確信MySQL的字符串搜索算法比你在PHP中提出的要好得多。

0

從原始數據讀取文件中的腳本一般會比數據庫更快。

但是,它聽起來像你想要查詢該數據,以找到匹配返回到JavaScript。在這種情況下,您可能會發現MySQL對數據的實際查詢/搜索會更快(尤其是在正確索引等情況下),因爲這是數據庫擅長的。

讀取大文件的可伸縮性也較差,因爲在腳本執行時您將使用大量服務器內存。

1

如果這是你將要定期取東西它可能是值得的預取的數據(從磁盤或數據庫,無所謂),並讓您的腳本拉來自像memcached這樣的RAM緩存。

3

時間上的差異比我敢說的底層技術更多的是系統設計。 MySQL結果和文件都可以緩存在內存中,並且性能差異會很小,因此可以忽略。

相反,我會問自己,維護方面的差異是什麼。你可能會改變數據嗎?如果沒有,只需將它彈出一個純文件。你是否可能經常改變內容的某些部分?如果是這樣,數據庫更容易操作。數據結構也是如此,如果需要「重組」,也許將數據放入數據庫會更有效率?

所以:做你覺得最方便的方式爲你和代碼和數據的未來維護者。 :-)

4

包括一個文件應該幾乎總是更快。如果您的數據庫位於另一臺機器上(例如在共享主機中)或多服務器設置中,查找將不得不額外跳躍一次。

但是,在實踐中,差異可能無關緊要。如果列表是動態的,那麼將其存儲在MySQL中將使您的生活更輕鬆。靜態列表(例如國家或州)可以存儲在PHP包含中。如果列表非常短(有幾百條)並且經常使用,則可以直接將它加載到JavaScript中,並取消AJAX。

如果你要去MySQL路線,並擔心速度,然後使用緩存。

$query = $_GET['query']; 
$key = 'query' . $query; 
if (!$results = apc_fetch($key)) 
{ 
    $statement = $db->prepare("SELECT name FROM list WHERE name LIKE :query"); 
    $statement->bindValue(':query', "$query%"); 
    $statement->execute(); 
    $results = $statement->fetchAll(); 
    apc_store($key, $results); 
} 

echo json_encode($results); 
+0

這是我能想象的最好的方式。即使文件系統最初速度較快,也不會比編寫您正在使用的PDO驅動程序的人寫出更快的文件選擇邏輯。 – Kris 2009-05-28 22:06:27

0

爲什麼不這樣做,看看哪個更快?兩種解決方案都非常簡單。

0

我最近有這個問題。我在每個頁面請求中查詢了一些mysql數據。對於我的數據集,編寫固定記錄長度文件比使用MySQL更快。

有報道說,做了一個文件的速度比MySQL的我幾個不同的因素:

  1. 文件大小小 - 在文本數據
  2. 我隨機挑選,而不是搜索的100KB - 索引沒有區別
  3. 連接時間 - 打開文件並讀取文件比在服務器負載較高時連接數據庫要快。這是特別真實的,因爲操作系統在內存中緩存文件

底線是我基準和比較結果。對於我的工作負載,文件系統更快。我懷疑,如果我的數據集增長,這將會改變。我將關注性能,並且我準備好改變未來的工作方式。

0

如果使用像APC或Xcache這樣的PHP字節碼緩存,包括該文件可能會更快。如果您使用PHP並且需要性能,則字節碼緩存絕對是必需的。

聽起來好像您正在考慮在您包含的PHP腳本中保留靜態數據,以避免觸碰數據庫。你基本上在做一個基本的緩存。這可以正常工作,只要你有一些方法可以在數據發生變化時刷新該文件。您也可能希望瞭解有關MySQL查詢緩存的內容,以便更快地對靜態數據進行SQL查詢。或Memcached將靜態數據保存在內存中。

相關問題