當前位置: 首頁> 最新文章列表> PDOStatement::fetchColumn 和PDOStatement::fetchAll 性能差異有多大?

PDOStatement::fetchColumn 和PDOStatement::fetchAll 性能差異有多大?

gitbox 2025-09-18
<span><span><span class="hljs-meta"><?php</span></span><span>
</span><span><span class="hljs-comment">// 下面是與文章內容無關的 PHP 代碼示例</span></span><span>
</span><span><span class="hljs-function"><span class="hljs-keyword">function</span></span></span><span> </span><span><span class="hljs-title">randomGreeting</span></span><span>(</span><span><span class="hljs-params"></span></span><span>) {
    </span><span><span class="hljs-variable">$greetings</span></span><span> = [</span><span><span class="hljs-string">"Hello!"</span></span><span>, </span><span><span class="hljs-string">"Hi!"</span></span><span>, </span><span><span class="hljs-string">"Hey there!"</span></span><span>, </span><span><span class="hljs-string">"Greetings!"</span></span><span>];
    </span><span><span class="hljs-keyword">return</span></span><span> </span><span><span class="hljs-variable">$greetings</span></span><span>[</span><span><span class="hljs-title function_ invoke__">array_rand</span></span><span>(</span><span><span class="hljs-variable">$greetings</span></span><span>)];
}

</span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-title function_ invoke__">randomGreeting</span></span><span>();
</span><span><span class="hljs-meta">?></span></span><span>

<hr>

</span><span><span class="hljs-meta"><?php</span></span><span>
</span><span><span class="hljs-comment">// 正文內容開始</span></span><span>
</span><span><span class="hljs-meta">?></span></span><span>

<h1></span><span><span class="hljs-title class_">PDOStatement</span></span><span>::</span><span><span class="hljs-variable constant_">fetchColumn</span></span><span> 和 </span><span><span class="hljs-title class_">PDOStatement</span></span><span>::</span><span><span class="hljs-variable constant_">fetchAll</span></span><span> 性能差異有多大?</h1>

<p>在 PHP 中使用 PDO 進行數據庫操作時,常常會遇到 <code></span><span><span class="hljs-title class_">PDOStatement</span></span><span>::</span><span><span class="hljs-variable constant_">fetchColumn</span></span><span>

上例中,每次循環只獲取一行的id ,內存消耗極低。

fetchAll 示例:

 
</span><span><span class="hljs-variable">$stmt</span></span><span> = </span><span><span class="hljs-variable">$pdo</span></span><span>-></span><span><span class="hljs-title function_ invoke__">query</span></span><span>(</span><span><span class="hljs-string">"SELECT id, name FROM users"</span></span><span>);
</span><span><span class="hljs-variable">$rows</span></span><span> = </span><span><span class="hljs-variable">$stmt</span></span><span>-></span><span><span class="hljs-title function_ invoke__">fetchAll</span></span><span>(PDO::</span><span><span class="hljs-variable constant_">FETCH_ASSOC</span></span><span>);
</span><span><span class="hljs-keyword">foreach</span></span><span> (</span><span><span class="hljs-variable">$rows</span></span><span> </span><span><span class="hljs-keyword">as</span></span><span> </span><span><span class="hljs-variable">$row</span></span><span>) {
    </span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-variable">$row</span></span><span>[</span><span><span class="hljs-string">'id'</span></span><span>] . </span><span><span class="hljs-string">' - '</span></span><span> . </span><span><span class="hljs-variable">$row</span></span><span>[</span><span><span class="hljs-string">'name'</span></span><span>] . </span><span><span class="hljs-string">"\n"</span></span><span>;
}

fetchAll 會一次性將整個結果集加載到內存,如果表非常大,可能會影響性能。

4 . 總結

綜上所述:

  • 如果只需要單列或少量數據, fetchColumn()是首選,更節省內存且性能更好。
  • 如果需要一次性處理整個結果集並且數據量可控, fetchAll()更方便,但對內存要求更高。
  • 在大數據量場景下,盡量避免fetchAll,改用fetch 或fetchColumn 分批處理。
<?php // 文章尾部與內容無關的PHP 代碼示例 function printTimestamp ( ) { echo "Current timestamp: " . time (); } printTimestamp (); ?>