我有两个表,我通过左联接来获取数据,但是由于我的数据库很大,将数据拉入dataTable需要花费太多时间。还有其他选择吗?请帮助。
$allPolicyWithOrganization = $allPolicyWithOrganization
->select('policies.*',
'leads.lead_id',
'leads.agent',
'leads.referrer_id',
'leads.vendor_id',
'leads.deleted_at'
)
//->where('policies.status', '!=', 1)
->leftJoin('leads', 'policies.lead_id', '=', 'leads.lead_id');
我有策略表和潜在顾客表。.我想从表中提取所有数据..要花很多时间
答案 0 :(得分:0)
您应该使用数据库视图,并在设置过滤条件的位置创建这些列的索引。它将迅速获取记录。试用此解决方案,您的问题将得到解决。 #Abir Adak
答案 1 :(得分:0)
除了在需要过滤的字段中使用索引之外,您是否尝试过使用缓存?
Schema::table('leads', function (Blueprint $table) {
$table->index(['lead_id',
'agent',
'referrer_id',
'vendor_id',
'deleted_at'
]);
});
并使用缓存(在我的情况下为Redis)
use Illuminate\Support\Facades\Cache;
$allPolicyWithOrganization = Cache::tags('policies')
->rememberForever('all.policies.with.organization', function () {
return $allPolicyWithOrganization
->select('policies.*',
'leads.lead_id',
'leads.agent',
'leads.referrer_id',
'leads.vendor_id',
'leads.deleted_at'
)
//->where('policies.status', '!=', 1)
->leftJoin('leads', 'policies.lead_id', '=', 'leads.lead_id');
});
当受影响的表中有更改时,请记住要清除缓存。
Cache::forget('all.policies.with.organization');
或按标签
Cache::tags('policies')->flush();