У меня есть представление sql, которое возвращает более 10 000 записей с примерно 120 столбцами (смешно, я знаю).Zend Fetch на большом столе 10 000 + строк, ~ 100 столбцов
Данные представления собираются из базы данных на PHP с использованием объекта Zend_Db_Table_Abstract. У нас есть контроллер отчетов, который выполняет fetchAll (который, очевидно, создает массивный массив) и сохраняет массив в объекте представления. Затем у нас есть сценарий вида, который выполняет итерацию по массиву и перекликается с форматированным массивом json.
Это медленно. Как более 1 минуты, чтобы сделать этот отчет, что я могу сделать, чтобы ускорить это?
Готов к сведению, что я очень новичок в этом проекте и не знаю Zend и немного о PHP. Кроме того, я не могу отказаться от многих из-за защиты данных и т. Д.
Если вы могли бы спросить, что вам нужно, чтобы помочь вам собрать картину, которая была бы замечательной. Но в основном это то, что делает скрипт:
Report Контроллер:
Setup some basic json report data (for data tables)
$this->view->report_data = fetchALL($oSelect);
Просмотр сценария:
Output the basic json stuff, then:
"report_data": [
<?php
for($i = 0; $i < count($this->report_data); $i++){
echo "[";
foreach($this->columns as $k=>$col){
echo '"'. $this->escape($this->report_data[$i][$col]) .'"';
if($k < count($this->columns) -1){
echo ',';
}
}
echo "]";
if($i < count($this->report_data) -1){
echo ",";
}
echo"\n";
}
?> ]
Таким образом, после выполнения некоторых исследований я понял, что я мог бы использовать выборку() вместо fetchAll(), чтобы получить 1 строку за раз, чтобы избежать массивного массива. Однако я пытался использовать выборку() и получил эту ошибку:
Призыв к неопределенному методу Zend_Db_Table_Abstract::fetch()
Так что теперь я стрельнул.
Моя идея состояла в том, чтобы получить каждую строку и выводить каждую строчку Json, но я не знаю, как это сделать в сценарии контроллера отчетов/просмотра. Должен ли я просто избавиться от сценария вида и просто использовать контроллер для вывода данных?
Во всяком случае почему fetch()
не работает, я не могу реально увидеть его в документации либо, а есть некоторый массив function _fetch()
Любая помощь будет оценена, любой, если вам нужно больше информации просто спросите. Thanks
На ваш взгляд, вы показываете все эти 10 000 записей на одной странице? Я не знаком с Zend, но обычно, когда одиночные запросы становятся слишком тяжелыми, вы можете использовать пейджинг. Таким образом, вы не получаете и не показываете сразу все данные, но в приличных размерах. Может быть, может помочь Zend Paginator? – hade
Сначала убедитесь, что php является узким местом. Запустите свой запрос через консоль phpmyadmin или mysql, чтобы убедиться, что он даже работает быстро там. – Maerlyn
Просмотр занимает около 2 секунд для загрузки через командную строку psql. @hade Вид выводит всю массу записей в формате json. Затем для обработки этого используются данные, которые отображают/разбивают на страницы. –