Влияет ли выборка массива mysql с MYSQL_ASSOC, а не с MYSQL_BOTH, на производительность - PullRequest
1 голос
/ 04 августа 2011

Простой вопрос, на который я не могу найти ответ.

Я пытаюсь выжать немного больше производительности из этого большого приложения, и мне интересно, переключается ли все функции mysql_fetch_array ()вызовы только для использования MYSQL_ASSOC будут иметь значение.Кажется, что это так, поскольку он создает массив с:

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

вместо числовых и ассоциативных ключей для одного и того же поля:

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

Ответы [ 3 ]

2 голосов
/ 24 июля 2012

У меня был точно такой же вопрос.Чтобы получить лучшее представление, я провел небольшой эксперимент:

Я выполнил один и тот же запрос три раза (с MYSQL_ASSOC, MYSQL_BOTH и MYSQL_NUM соответственно) несколько раз, чтобы получить три средних времени.Оказалось, что в моем эксперименте MYSQL_NUM был примерно на 17% быстрее, чем MYSQL_ASSOC, а MYSQL_ASSOC был примерно на 16% быстрее, чем MYSQL_BOTH.

Я уверен, что мой маленький эксперимент имеет свои недостатки, но я уверен, что он идет вправильное направление.

Так что я бы сказал, что MYSQL_ASSOC дает вам хороший компромисс, потому что вы все еще можете переключать столбцы в своей таблице ...

2 голосов
/ 04 августа 2011

В этом сценарии преобладают две концепции, которые вы должны учитывать: -

  1. Всегда полезно использовать ассоциативные индексы "MYSQL_ASSOC" / "MYSQL_BOTH«вместо того, чтобы просто использовать числовые индексы, потому что порядок полей может измениться в течение срока жизни веб-сайта.Если вы понимаете и соглашаетесь с этим пунктом, тогда вы можете использовать тип результата "MYSQL_ASSOC" вместо типа результата "MYSQL_BOTH".

  2. Если вас беспокоитсколько памяти используется для запросов, которые возвращают большие результирующие наборы, тогда вы можете использовать функцию "mysql_free_result()".Более подробную информацию об этой функции можно найти здесь .Однако вся связанная память результатов автоматически освобождается в конце выполнения скрипта.

Теперь, возвращаясь к вашему вопросу, я думаю, что с точки зрения производительности, используя "MYSQL_ASSOC "тип результата может привести к экономии небольшого объема памяти сервера (где размещен веб-сайт, когда соответствующая веб-страница выполняется синтаксическим анализатором PHP), но вы также должны убедиться и понять вышеизложенные пунктыа также.

Надеюсь, это поможет.

0 голосов
/ 07 октября 2016
$sql = "SELECT candidate.cand_number, candidate.cand_fname, candidate.cand_desc 
        FROM candidate ".$join.' 
        WHERE '.$condition;
$result = mysql_query($sql) or die(mysql_error()); 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...