2013-11-19 5 views
0

В последнее время я переместил все свои функции «mysql specific» в класс, так что, если в будущем я решил переключить языки БД, мне не придется исправлять все мои скриптов, но только один класс.Самый эффективный способ вызова mysqli_fetch_assoc

Мой вопрос об эффективности и скорости на больших данных.

К примеру, сейчас в моем database.class.php у меня есть:

public function fetchAssociative($data) { 
    $assocarr = array(); 
    while ($row = mysqli_fetch_assoc($data)){ 
     array_push($assocarr, $row); 
    } 
    return $assocarr; 
} 

которая затем вызывается в моем сценарии.

В сравнении с тем, когда я просто использовать

while ($row = mysqli_fetch_assoc($result)) { 
    //operate on returned data ONE ROW AT A TIME 
} 

прямо в моем сценарии.

Теперь, как я уже упоминал ранее, удобно иметь все функции mysql в одном классе, но как насчет эффективности скорости? В этом примере мой сценарий должен ждать, пока все данные будут возвращены, прежде чем выполнять какие-либо операции, где раньше (используя while ($ row = mysqli_fetch_assoc ($ result))), где выполнялось по одному за каждую возвращаемую строку.

TLDR: Как влияет эффективность и скорость, если я вернусь к функциям mysql в классе?

+1

@AmalMurali я уже есть. – dudemanbearpig

ответ

0

У вас должно быть две функции, а не одна.

public function fetch($result, $method = MYSQLI_ASSOC) { 
    return mysqli_fetch_array($result, $method); 
} 

public function fetchAll($result, $method = MYSQLI_ASSOC) { 
    $ret = array(); 
    while (mysqli_fetch_array($result, $method)){ 
     $ret[] = $row; 
    } 
    return $ret; 
} 
  • в случае, если вам нужны все ваши данные сразу - звоните fetchAll()
  • в случае, если вам нужно только одну строку или есть слишком много возвращаемых строк - использовать fetch() раз/в цикле в то время как соответственно.
1

Мой вопрос об эффективности и скорости на больших данных.

Тогда вам следует беспокоиться о SQL-запросах и индексации. Не PHP-классы или функции PHP. 98% проблем с производительностью с MySQL и большими данными (чтение больших наборов данных) вызваны неэффективными SQL-запросами, такими как подзапросы, операторы IN/EXISTS, не индексирование, неправильная индексация, использование объединений без индексов и не понимание двигатель MySQL ..

Смежные вопросы