Mysql
 sql >> Base de données >  >> RDS >> Mysql

pouvons-nous éviter d'être éloquents dans un grand nombre d'enregistrements

Jetons un coup d'œil à une partie de cela.

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']."%");
       });
 }

Ce schéma de correspondance des mots clés est intrinsèquement et désastreusement lent. C'est lent à la fois dans Eloquent et dans SQL natif. Il n'y a aucun moyen que cela puisse fonctionner dans MySQL sans faire un analyse complète de la table . Autrement dit, il doit examiner chaque ligne de votre table à la recherche de correspondances et ne peut pas, dans MySQL, exploiter un schéma de recherche indexé. Pourquoi ?

column LIKE 'constant%'

peut regarder un index sur column et trouver rapidement n'importe quelle valeur commençant par 'constant' . Mais

column LIKE '%constant%'

doit examiner chaque valeur du tableau. Le premier % rend la recherche d'index inutile.

Dans MySQL, il serait sage d'enquêter sur la recherche FULLTEXT de MySQL comme un moyen de gérer votre recherche de mots clés. (Les versions récentes de postgreSQL peuvent gérer ce type de requête directement avec un autre type d'index, mais pas MySQL.)