Что лучше использовать, fetch array(MYSQLI ASSOC) or fetch all (MYSQLI ASSOC)?


2 функции из объекта mysqli_result:

1.- fetch_array(): они получают строку в массиве только с одной записью.

в этом случае вы запрашиваете для каждой строки базу данных?

2. - fetch_all (): получает все строки одновременно и возвращает массив со всеми.

и в этом случае запрос только один раз (база данных)?

я не знаю, что было бы лучшим способом сделать это и наиболее оптимальным. Я не знаю, было бы лучше получить один к одной строке или если получить их все сразу было бы хуже.

Примеры -

1. - fetch_array ():

$resultUsers = getAllUsers($db);
while($row = $resultUsers->fetch_array()){
    echo $row['name'];
}

2. - fetch_all ():

$resultUsers = getAllUsers($db);
foreach ($resultUsers->fetch_all(MYSQLI_ASSOC) as $value) {
    echo $value['name'] . "<br>";
}

2. а. - функция getAllUsers() уже возвращает целочисленный массив с fetch_all() внутри массива и здесь проходит через него.

foreach (getAllUser($db) as $value) {
    echo $value['name'] . "<br>";
}

то, что я не знаю, как вы запрашиваете базу данных, если в fetch_array() запрос один за другим из базы данных и fetch_all() все сразу. Или в двух Вы делаете весь запрос сразу и то, что изменение похоже на перебор данных.

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

 5
Author: RodriKing, 2017-02-28

3 answers

Мне кажется интересным вопросом. Жаль, что кажется, что покидает ОП

Тем не менее, следует внести в него что-то.

В большинстве ситуаций программирования в отношении php-mysql необходимо будет получить данные из базы данных для сравнения, отображения на экране и т. д.

Существует в основном 3 метода, которые наиболее часто используются для получения наборов результатов в MySQLi:

  • mysqli_fetch_assoc(): Что возвращает ассоциативный массив данных.

  • mysqli_fetch_array(): Возвращает комбинацию элементов, ассоциативных, а также данных с числовой индекс.

  • mysqli_fetch_object(): Возвращает объект со свойствами, которые соответствуют строке, полученной.

В интересном сравнении, сделанном в spearheadsoftwares.com (см. изображение) анализируются три метода с использованием эталонных испытаний, выполняемых обновленным программным обеспечением в различных условиях нагрузки.

В тесте получены результаты данных 10, 100, 1000, 10000, 100000, 1000000, 10000000 журналы, чтобы увидеть, насколько быстро и эффективно каждая функция.

Каждый набор данных содержит столбец типа int, который является уникальным, и столбец типа - varchar. То есть обычный набор данных, такой как те, которые мы обычно используем в любом запросе типичный.

Как говорят изображение стоит тысячи слов (хотя в этой фразе много лжи ... :) ... Давайте оставим это для другого форума.

Это график результата:

introducir la descripción de la imagen aquí

Видя эти результаты, можно заключить следующее:

  • Функциональность MySQLi по умолчанию, mysqli_fetch_assoc, работает с более высокой производительностью, чем другие 2 метода (mysqli_fetch_array и mysqli_fetch_object).

  • Производительность mysqli_fetch_object оправдана, когда вы возвращаете объекты вместо собственных массивов, которые всегда приносят лучшее использование памяти, чем любой другой тип выходного массива. И использовать объектно-ориентированный подход набора результатов другие 2 функции не могут удовлетворить.

  • В случае mysqli_fetch_array(), проблема здесь в повседневном программировании многие программисты php использовали mysqli_fetch_array() как таковой, не вдаваясь в детали его использования. По умолчанию mysqli_fetch_array возвращает два типа наборов результатов в соответствии со значением по умолчанию result_type MYSQLI_BOTH:

    • Result_type: MYSQLI_NUM - это дает нам только массив пронумерованных индексов, например: array ([0] => 'apple')
    • Result_type: MYSQLI_ASSOC - это просто ассоциативный массив, например: array ('fruit' => 'apple'), где 'fruit' будет имя столбца базы данных или псевдоним используется.

    Поэтому, когда мы используем mysqli_fetch_array, мы получим дублированный набор данных, состоящий как из пронумерованные индексы, как в ассоциативных наборах, что, конечно, является нашим блокатором производительности.

    Поэтому, когда вы используете функцию mysqli_fetch_array, всегда указывайте return_type необходимого массива результирующего набора.

Заключение

Как для производительности, так и потому, что в большинстве случаев нам понадобится ассоциативный массив во время управления взаимодействующими данными в php, наиболее рекомендуемой функцией будет mysqli_fetch_assoc()

 6
Author: A. Cedano, 2017-06-20 16:33:31

Фактически выполняется запрос только один раз. Единственное большое различие заключается в том, как они позволяют вам работать с записями. По одному или все сразу.

Fetch_array () Работа с одной строкой результатов.

И хорошо, mysqli_fetch_all () возвращает все строки в массиве за один шаг. Эта функция потребляет больше памяти, чем fetch_array()

 0
Author: user2930137, 2017-02-28 16:00:18

Это будет зависеть от вас, потому что, если у вас много результатов или вы ожидаете большого количества результатов, вы можете заблокировать память, поэтому лучше всего было бы перебирать один за другим, а не извлекать все, так что это будет зависеть от того, какое использование вы собираетесь дать ему и какую реализацию вы хотите использовать в соответствии с вашими потребностями

 0
Author: Paris N. Salguero, 2017-02-28 16:01:39