我创建了一个查询以使用此查询获取人员列表。在检查登录用户的权限级别后运行。
if (Auth::user()->hasPermissionTo('All Sections')) {
$itemregistrations = DB::table('itemregistrations')
->join('sections', 'itemregistrations.sectionid', '=', 'sections.sectionid')
->join('categories', 'itemregistrations.categoryid', '=', 'categories.categoryid')
->join('operasi', 'itemregistrations.operasiid', '=', 'operasi.operasiid')
->select('itemregistrations.ItemRegistrationID','itemregistrations.name', 'itemregistrations.Nobadan', 'sections.sectionname', 'categories.categoryname', 'operasi.operasiname')
->get();
}
但是,查询的加载时间很长,大约需要一分钟才能完成加载。该列表显示了大约1115。
如何减少加载时间?
我读到有关急切加载以减少加载时间的信息。但是我的审判没有成功。
部门是员工部。
类别是人员级别
operasi是员工的职级,与类别相关,每个类别都有其自己的操作名称。
这是itemregistrations表上的索引。
我已经安装了laravel调试器并产生以下结果: -6意见 -4个查询
select * from `users` where `id` = 1 limit 1
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`
-1116登机门
上面的查询是根据很少的权限过滤的。
这些是所涉及表的索引:
答案 0 :(得分:1)
对于数据库方面,请确保在JOIN涉及的列上具有正确的索引
sections sectionid
categories categoryid
operasi operasiid
尤其是
上的综合索引itemregistrations (sectionid , categoryid , operasiid )
无论如何,在实际应用中1256 si的负载是完全没有用的..
为此,您可以使用分页
根据您的基数,您应该建立一个索引
itemregistrations(operasiid,sectionid,categoryid)
您可能需要删除所涉及的同一列上的索引,而只保留组合...