Что лучше использовать, 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() все сразу. Или в двух Вы делаете весь запрос сразу и то, что изменение похоже на перебор данных.
или есть лучший способ сделать его более оптимальным или сосредоточить его по-другому, я надеюсь на вашу помощь (от кого-то, кто знает эту тему). Приветствие.
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
. То есть обычный набор данных, такой как те, которые мы обычно используем в любом запросе типичный.
Как говорят изображение стоит тысячи слов (хотя в этой фразе много лжи ... :) ... Давайте оставим это для другого форума.
Это график результата:
Видя эти результаты, можно заключить следующее:
Функциональность 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()
Фактически выполняется запрос только один раз. Единственное большое различие заключается в том, как они позволяют вам работать с записями. По одному или все сразу.
Fetch_array () Работа с одной строкой результатов.
И хорошо, mysqli_fetch_all () возвращает все строки в массиве за один шаг. Эта функция потребляет больше памяти, чем fetch_array()
Это будет зависеть от вас, потому что, если у вас много результатов или вы ожидаете большого количества результатов, вы можете заблокировать память, поэтому лучше всего было бы перебирать один за другим, а не извлекать все, так что это будет зависеть от того, какое использование вы собираетесь дать ему и какую реализацию вы хотите использовать в соответствии с вашими потребностями