OR UPPER(lu.opis) LIKE UPPER('%SomeName%')
a 3 problèmes de performances :
ORest mal optimisé. Essentiellement, la table doit être analysée pour vérifier toutes les lignes. Il est peu probable que les index soient utiles.UPPER(indexed-column)empêche l'utilisation d'un index sur cette colonne. Ceci est facilement contourné en déclarant que cette colonne a unCOLLATIONc'est "insensible à la casse" -- c'est-à-dire quelque chose commeutf8_unicode_ci; notez le_ci.LIKE '%...impossible d'utiliser un index à cause du leading caractère générique.
De plus, il est généralement insensé d'avoir
32497 row(s) returned
Qu'allez-vous faire avec autant de lignes ? Le temps de transfert réseau sera important, même si la requête elle-même ne l'est pas.
Pour "résoudre" le LIKE , OR , et UPPER tous les problèmes à la fois, rassemblez le texte dans une seule colonne d'un seul tableau. Ensuite, fournissez un FULLTEXT index sur cette colonne. Le, MATCH ... AGAINST ... fonctionnera beaucoup plus rapidement - au moins pour faire le SomeName chercher. (Les LEFT JOINs sont une autre affaire.)