Vamos dar uma olhada em uma parte disso.
if(!empty($filter['keyword'])) {
$leads=$leads->where(function ($q) use ($filter) {
$q->where('ld_name','like', "%".$filter['keyword']."%")
->orWhere('ld_email','like', "%".$filter['keyword']."%")
->orWhere('ld_phoneno','like', "%".$filter['keyword']."%");
});
}
Esse esquema de correspondência de palavras-chave é inerente e desastrosamente lento. É lento tanto no Eloquent quanto no SQL nativo. Não há como funcionar no MySQL sem fazer um verificação completa da tabela . Ou seja, ele deve examinar cada linha de sua tabela procurando por correspondências e não pode, no MySQL, explorar qualquer esquema de pesquisa indexado. Por quê?
column LIKE 'constant%'
pode ver um índice na
column
e encontre rapidamente qualquer valor começando com 'constant'
. Mas column LIKE '%constant%'
tem que olhar para cada valor na tabela. O principal
%
torna a pesquisa de índice inútil. No MySQL, você seria sábio para investigar pesquisa FULLTEXT do MySQL como uma forma de lidar com sua pesquisa de palavras-chave. (Versões recentes do postgreSQL podem lidar com esse tipo de consulta diretamente com um tipo diferente de índice, mas não com o MySQL.)