2011-04-06 126 views
2

我在我的應用程序中使用了一個Doctrine,但它似乎確實減慢了我的應用程序。一個簡單的代碼是這樣的:教義真的很慢嗎?

$q = Doctrine_Query::create() 
     ->select('co.id') 
     ->from('CounterOnline co') 
     ->where('co.user_id = ?', $user_id) 
     ->orWhere('co.ip = ?', $ip) 
     ->limit(1); 
$counter_online = $q->fetchOne(); 

需要0.025206089019775秒執行。我在我的應用程序中做了很多數據庫查詢,所以時間是一個可怕的結果。

是教條真的很慢或以某種方式我的配置可能會搞砸?緩存不是真正的選擇,因爲大多數服務器既沒有安裝內存緩存也沒有安裝APC。

+2

這是第一個電話的平均速度或速度?我的猜測是,你應該測試沒有教條的完全相同的查詢,看看它是否更快。 2-3毫秒的查詢不是那麼慢。 – 2011-04-06 15:02:41

+0

2-3ms並不差,但是25ms相當多,並且會在很多用戶的生產環境中出現問題。 – Kaivosukeltaja 2011-04-06 15:08:24

回答

2

的表現可能取決於很多事情:索引

  • 字段或不
  • 在表中的數據量
  • 硬件
  • ORM
  • ...

但是,我想對於這樣一個簡單的查詢,問題應該是n在這裏不要成爲教義。

+0

不能同意更多。 – 2011-04-06 15:03:51

3

將您的查詢放入運行查詢100次的循環中,並比較執行時間。

如果它線性縮放(即從0.025206秒到2.5206秒),那麼您的數據庫或可能是您的Doctrine安裝(不是Doctrine本身,因爲如果這種時間正常時沒有人會使用它)會有問題。如果可能,請確保您的數據庫已正確索引和/或正常化。

如果它非線性地擴展(即從0.025206秒到0.0292秒),那麼您的應用程序可能連接到遠程數據庫,而不是本地數據庫,並且大部分執行時間是圍繞建立的TCP/IP開銷與數據庫的連接 - 執行時間的小差異反映了查詢本身運行得很好。仔細檢查你的應用程序的配置文件,以確保它連接到正確的數據庫。