Как уменьшить время загрузки, необходимое для отображения вывода? - PullRequest
0 голосов
/ 30 октября 2018

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

 $itemregistrations = DB::table('itemregistrations')
                     ->join('sections', 'itemregistrations.sectionid', '=', 'sections.sectionid')
                     ->join('categories', 'itemregistrations.categoryid', '=', 'categories.categoryid')
                     ->join('operasi', 'itemregistrations.operasiid', '=', 'operasi.operasiid')
                     ->select('itemregistrations.*', 'sections.sectionname', 'categories.categoryname', 'operasi.operasiname')
                     ->get();

Данные ($ itemregistrations) будут отображаться в блейде с использованием foreach.

     @foreach($itemregistrations as $index => $value)                                               
              <tr>
                 <td>{{ $index+1 }}</td>
                 <td>{{ $value->sectionname }}</td>
                 <td>{{ $value->categoryname }}</td>
                 <td>{{ $value->operasiname }}</td>
                 <td>{{ $value->name }}</td>
                 <td>{{ $value->Nobadan }}</td
               </tr>
      @endforeach 

Отладка Laravel показывает 6 запросов и 1129 результатов поиска.

Список запросов на панели отладки

  select `permissions`.*, `model_has_permissions`.`model_id` as `pivot_model_id`, `model_has_permissions`.`permission_id` as `pivot_permission_id` from `permissions` inner join `model_has_permissions` on `permissions`.`id` = `model_has_permissions`.`permission_id` where `model_has_permissions`.`model_id` = 1 and `model_has_permissions`.`model_type` = 'App\User'

   select `roles`.*, `model_has_roles`.`model_id` as `pivot_model_id`, `model_has_roles`.`role_id` as `pivot_role_id` from `roles` inner join `model_has_roles` on `roles`.`id` = `model_has_roles`.`role_id` where `model_has_roles`.`model_id` = 1 and `model_has_roles`.`model_type` = 'App\User'

  select `itemregistrations`.`ItemRegistrationID`, `itemregistrations`.`name`, `itemregistrations`.`Nobadan`, `sections`.`sectionname`, `categories`.`categoryname`, `operasi`.`operasiname` from `itemregistrations` inner join `sections` on `itemregistrations`.`sectionid` = `sections`.`sectionid` inner join `categories` on `itemregistrations`.`categoryid` = `categories`.`categoryid` inner join `operasi` on `itemregistrations`.`operasiid` = `operasi`.`operasiid`

Результаты Sample Gate приводят к панели отладки

  success
   array:4 [▼
   "ability" => "Edit Pegawai"
   "result" => true
   "user" => 1
   "arguments" => "[0 => Edit APR]"
  ]

В чем причина загрузки? Это потому что запрос или цикл foreach?

Как уменьшить время загрузки для отображения вывода? До этого я использую пагинацию, и это работает .. Однако я не могу использовать пагинацию при использовании datatable, так как он не выполняет поиск по всем запросам при использовании пагинации. Он будет искать только на первой странице нумерации страниц.

Ниже приведен результат запроса EXPLAIN в phpmyadmin вышеупомянутого запроса

enter image description here

1 Ответ

0 голосов
/ 28 ноября 2018

Вы можете использовать свойство With в своей модели Itemregistration, чтобы загрузить все отношения. Может быть, добавление индексов в ваши таблицы может помочь

...