2011-08-04 7 views
1

簡単な質問私は答えが見つからないようです。MYSQL_BOTHではなくMYSQL_ASSOCを使用してmysql配列を取得すると、パフォーマンスに影響が出る

私はこの大規模なアプリケーションからいくつかのパフォーマンスを絞ろうとしていますが、MYSQL_ASSOCだけを使用するようにmysql_fetch_array()関数の呼び出しをすべて切り替えると違いが出るのだろうかと思います。代わりに、同じフィールドの数値と連想キーの両方の

$row['field1'] = 'field1-value'; 

:それはそれだけでアレイを作成いますので、同じよう に思える

$row[0] = 'field1-value'; 
$row['field1'] = 'field1-value'; 
+0

あなたは両方のMySQLとするとき、アレイを通してあなたのループは、各行が再び繰り返され、ほとんどすべての場合、数値配列または連想配列のみが必要だと思います。だから、私たちが必要とするものを常に検索する方がいいです。MYSQL_BOTHは、配列内の不要な記憶域を意味します。 – Vijay

答えて

2

このシナリオで流行している二つの概念がありますが、これあなたは考慮する必要があります -

  1. MYSQL_ASSOC」/ "の連想インデックスを使用することが常に便利です0 "にすることができます。これは、フィールドの順序がウェブサイトの存続期間中に変化する可能性があるためです。 &がこの点に同意すれば、 "MYSQL_BOTH"結果タイプの代わりに "MYSQL_ASSOC"結果タイプを使用することができます。

  2. 大きい結果セットを返すクエリに使用されているメモリの量が不安な場合は、 "mysql_free_result()"関数を使用できます。この機能の詳細はhereです。ただし、関連付けられた結果メモリはすべて、スクリプトの実行終了時に自動的に解放されます。

は今、あなたの質問に戻って来て、私は、サーバーのメモリを少し節約をもたらすことができる「MYSQL_ASSOC」結果タイプを使用して、パフォーマンスの観点から、(ウェブサイトがホスティングされているところだと思います関連するWebページがPHP Parserによって実行されている場合)、上記の点についても&が理解できるようにする必要があります。

希望します。

+0

ありがとう、それはそれをよく説明します。状況は、mysql_fetch_array()関数がMYSQL_BOTHにデフォルト設定されているため、このアプリケーションの構築を開始して以来、そのデフォルトを使用しています。アプリのいくつかの部分は、連想ではなく数値指標を利用するかもしれないので、MYSQL_ASSOCだけに切り替えて潜在的なバグを見つけ出す価値があるかどうかを調べることにしました。 –

2

私はまったく同じ質問をしました。

3回の平均タイミングを得るために同じクエリを複数回(MYSQL_ASSOC、MYSQL_BOTH、MYSQL_NUMで)3回実行しました。私の実験では、MYSQL_NUMはMYSQL_ASSOCよりも約17%速く、MYSQL_ASSOCはMYSQL_BOTHよりも約16%高速でした。

私の小さな実験には欠陥があると確信していますが、正しい方向に進むと確信しています。

だから私はあなたがまだあなたのテーブルの列を切り替えることができるのでMYSQL_ASSOCはあなたに良い妥協点を与えると言うだろう...

0
$sql = "SELECT candidate.cand_number, candidate.cand_fname, candidate.cand_desc 
     FROM candidate ".$join.' 
     WHERE '.$condition; 
$result = mysql_query($sql) or die(mysql_error()); 
+0

ようこそStackoverflowへ!あなたの答えにもいくつかの説明を記入してください。 – rbr94

関連する問題