2010-12-10 78 views
1

我想知道,哪些代碼在thory需要更長的時間:時間複雜度從MySQL數據庫中讀取

1.

$query = "SELECT Something1, Something2 FROM base WHERE SomeCondition"; 
$result = mysql_query($query); 
while ($row = mysql_fetch_array($result, MYSQL_NUM)) { 
//We do something with $row[0] and row[1] 
} 

2.

$query = "SELECT Something1 FROM base WHERE SomeCondition"; 
$result = mysql_query($query); 
while ($row = mysql_fetch_array($result, MYSQL_NUM)) { 
//We do something with $row[0] 
} 
$query = "SELECT Something2 FROM base WHERE SomeCondition"; 
$result = mysql_query($query); 
while ($row = mysql_fetch_array($result, MYSQL_NUM)) { 
//We do something with $row[0] 
} 

現在1.應更快,因爲雖然統計以O(n)時間執行,而另一個以O(2 * n)執行,但是第一個必須一次查詢兩列,而在2中必須查詢一列列,但兩次。現在我想知道一次一列或兩列一次性的mysql_query和mysql_fetch_array性能如何?

回答

1

在給定示例中,第一個選項(單個查詢)將運行速度提高2倍。

你可能認爲,由於數據庫瓶頸通常是I/O速度應該是相同的(從磁盤讀取x數據或讀取x/2數據),但由於事實如何記錄寫入文件系統以及文件系統只能讀取離散塊的事實表明,與讀取多列相比,只讀一列的速度並不是更快(這種差異可能取決於RDBMS,只有在表格中包含多個列或磁盤I/O不是瓶頸,但例如通過非常慢的WAN訪問數據庫)。

運行一個查詢的其他好處(儘管輕微相比以上):

  • 查詢規劃需要分析每個查詢,並確定如何執行它
  • 有開銷在發送每個查詢到服務器
+0

查看詳情感謝您的解釋! – 2010-12-10 19:05:29

0

一般來說,你會希望在PHP上使用數據庫引擎來做任何事情,因爲前者通常是針對這些事情進行優化的。 MySQL在搜索和檢索數據方面比PHP更快,這就是我們首先使用它的原因。另外,儘管網絡連接和套接字的開銷很小,但無論如何都會使第一個解決方案更快。

+0

這是文件系統上I/O操作的粒度,它解釋了它遠遠超過網絡連接(和/或查詢計劃等)的開銷。在我的A – Unreason 2010-12-10 18:34:29