2011-09-16 90 views
2

當我計劃向The Application(TM)添加新的一批(如公司生成的龐然大物)時,出現了一個奇怪的問題。爲每行需要一個被調用的過程設置一個結果集,通過創建一個循環CURSOR並調用過程的過程,或者簡單地在PHP中獲取集合,做「手動」?該程序將在短時間內運行幾次(每次呼叫約1秒,每次程序約2-3次呼叫,每天幾次)。在PHP循環中使用遊標

我問這個問題的原因是,我想知道是否有人有任何經驗,CURSORS會比多次在MySQL和PHP之間發送數據的開銷更低效。另一個問題是它使用了一個核心表,所以我想盡量減少對它的影響。

+0

這個程序,是mysql存儲過程嗎? – TJHeuvel

+0

是的,到目前爲止它是一個存儲過程,平均預期運行時間大約爲一秒。 – Naltharial

回答

1

您可以創建一個實現PHP Iterator接口的存根類(http://php.net/manual/en/class.iterator.php)。當你用Iteretor接口實例化你實現的類時,它可以保持連接並跟蹤CURSOR的位置。當您創建此對象的新實例時,您可以運行初始查詢並獲取初始化遊標。然後,在對象上使用foreach時,它將調用next()方法的對象自定義實現,您將編碼以將CURSOR提前移動並根據循環的需要返回當前值。

+0

雖然不是我正在尋找的性能答案,但您的答案確實爲我的問題提供了新的輸入,所以謝謝。 – Naltharial