Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

podemos evitar eloqüência em grande número de registros


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.)