Quelle est une alternative à l'opérateur LIKE lors de l'interrogation d'un grand nombre de lignes ?
P粉191610580
2023-09-02 13:02:15
<p>J'ai une table avec une colonne qui stocke des chaînes aléatoires comme ceci : </p>
<pre class="brush:php;toolbar:false;">example_id = qwhs77gt65g7*</pre>
<p>Certaines données de la colonne comportent désormais un astérisque (*), tandis que d'autres n'en comportent pas. </p>
<p>Je dois sélectionner ceux qui le sont. J'utilise cette requête : </p>
<pre class="brush:php;toolbar:false;">SELECT example_id FROM example_tbl WHERE example_id LIKE '%*%'</pre>
<p>Maintenant, cela ne poserait normalement pas de problème, mais j'interroge des millions de lignes et d'après ce que je peux dire, l'opérateur LIKE affecte mes performances. La requête prendra plusieurs heures</p>
<p>Ma question est la suivante : quelle est l'alternative à l'opérateur LIKE ? </p>
<p>PS L'astérisque est toujours à la fin de la chaîne. Je ne sais pas si cela aide</p>
Puisque vous avez mentionné "l'astérisque est toujours à la fin" alors vous pouvez essayer
其中 example_id LIKE '%*'
.Cela trouvera n'importe quelle valeur se terminant par "*"
ou
consiste à rechercher une sous-chaîne dans une colonne d'un tableau.
Une façon d'y parvenir est d'utiliser la fonction instr(), qui prend 3 paramètres.
Syntaxe : instr(rank, string, sub_string)
Classement :
Maintenant, comment appliquer cela à la table ? Puisque la fonction instr() est x3, elle est simple à appliquer.
Exemple : filtre[ZCT] où instr(1,ALLOTEDTO,"Ram") 0.
Où 1 est la position de départ pour trouver la sous-chaîne, ALLOTEDTO est le nom de la colonne composée de chaînes et le dernier paramètre est la sous-chaîne elle-même. Cela vous donnera tous les enregistrements de la table où la colonne ALLOTEDTO contient la sous-chaîne "Ram"
C'est équivalent à.
Sélectionnez * dans ZCT où ALLOTEDTO est similaire à "%Ram%".
Remarque : La fonction Instr() est sensible à la casse, utilisez donc toujours les fonctions majuscules ou minuscules.