mysql - 如何减少显示输出所需的加载时间?

标签 mysql sql laravel-5 lazy-loading

我使用此查询从数据库获取数据列表,然后使用数据表显示它。但是,查询在转换为数据表之前需要更长的时间来加载数据。该应用程序是在 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显示在 Blade ​​中..

     @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`

调试栏中的示例门结果

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

加载的原因是什么?是因为查询还是foreach循环?

如何减少显示输出的加载时间?在此之前,我使用分页并且它有效。但是,在使用数据表时我无法使用分页,因为它在使用分页时不会搜索所有查询。它只会在分页的第一页上搜索。

下面是上述查询在 phpmyadmin 中 EXPLAIN 查询的结果

enter image description here

最佳答案

您可以在 Itemregistration 模型中使用 With 属性来加载所有关系。也许在表中添加索引会有所帮助

关于mysql - 如何减少显示输出所需的加载时间?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53055897/

相关文章:

sql - 我什么时候应该支持 JOIN 而不是单一属性中的属性访问?

javascript - React Native中如何从TextField获取值,由于空值导致无法将数据存储到数据库

php - 加载所有帖子并检查该帖子是否在 Laravel 中被喜欢

mysql - 如何通过本地 Linux 机器截断(删除所有行)远程 SQL 服务器上的表

php - 如何根据它们是否匹配行号来填充 HTML 表编号行?

php - php中的mysql查询循环

Elasticsearch中Mysql导入数据状态

php - Mysql 在一个查询中替换两个值?

SQL Server 选择具有最近日期时间的记录

php - 如何使 Laravel 中的路由不区分大小写?