Ce que vous avez indiqué est tout à fait correct, la table temporaire ne sera visible que pour l'utilisateur/la connexion actuelle. Néanmoins, il y a des frais généraux et d'autres problèmes tels que :
- Pour chacune des milliers de recherches, vous allez créer et remplir ce tableau (et le supprimer plus tard) - et non par utilisateur, par recherche. Parce que chaque recherche ré-exécutera très probablement le script, et "par session" ne signifie pas session PHP - cela signifie session de base de données (connexion ouverte).
- Vous aurez besoin du
CREATE TEMPORARY TABLES
privilège, que vous pourriez pas. - Néanmoins, cette table devrait vraiment avoir le type MEMORY, qui vole votre RAM plus qu'il n'y paraît. Parce que même avec VARCHAR, les tables MEMORY utilisent un stockage de lignes de longueur fixe.
- Si votre heuristique doit plus tard faire référence à cette table deux fois (comme
SELECT xyz FROM patternmatch AS pm1, patternmatch AS pm2 ...
) - cela n'est pas possible avec les tables MEMORY.
Ensuite, il serait plus facile pour vous - et aussi pour la base de données - d'ajouter le LIKE '%xyz%'
directement sur vos images
tableaux WHERE
clause. Il fera la même chose sans la surcharge liée à la création d'une TABLE TEMP et à sa jonction.
Dans tous les cas - peu importe la direction que vous prendrez - ce WHERE sera horriblement lent. Même si vous ajoutez un index sur images.name
vous aurez probablement besoin de LIKE '%xyz%'
au lieu de LIKE 'xyz%'
, afin que cet index ne soit pas utilisé.
Non. :)
Options alternatives
Si vous envisagez d'utiliser MyISAM au lieu d'InnoDB, soyez conscient de la limitation souvent négligée selon laquelle les recherches FULLTEXT ne renvoient rien que si le nombre de résultats est inférieur à 50 % du nombre total de lignes de la table.
D'autres choses que vous voudrez peut-être regarder, sont par exemple Solr (une belle introduction lue sur ce sujet lui-même serait le début de http://en.wikipedia.org/wiki/Apache_Solr ). Nous l'utilisons dans notre entreprise et il fait un excellent travail, mais il nécessite un certain apprentissage.
Résumé
La solution à votre problème actuel lui-même (la recherche) consiste à utiliser les fonctionnalités FULLTEXT.
Pour vous donner un chiffre, 10 000 appels par seconde ne sont déjà pas "insignifiants" - avec des centaines de milliers de recherches par seconde, le type de problèmes de performances que vous rencontrerez est partout dans votre configuration. Vous allez avoir besoin de quelques serveurs, d'un équilibrage de charge et de tonnes d'autres trucs technologiques incroyables. Et l'un d'entre eux sera par exemple Solr;)