Wat u zei is helemaal correct, de tijdelijke tabel is alleen zichtbaar voor de huidige gebruiker/verbinding. Toch is er wat overhead en enkele andere problemen, zoals:
- Voor elk van de duizenden zoekopdrachten die je gaat maken en die tabel vullen (en later neerzetten) - niet per gebruiker, per zoekopdracht. Omdat elke zoekopdracht het script hoogstwaarschijnlijk opnieuw zal uitvoeren, en "per sessie" betekent niet PHP-sessie - het betekent databasesessie (open verbinding).
- Je hebt de
CREATE TEMPORARY TABLES
. nodig privilege, dat u misschien niet hebben. - Toch zou die tabel eigenlijk het MEMORY-type moeten hebben, dat je RAM meer steelt dan het lijkt. Omdat zelfs met VARCHAR, MEMORY-tabellen gebruik maken van rijopslag met een vaste lengte.
- Als je heuristiek later twee keer naar die tabel moet verwijzen (zoals
SELECT xyz FROM patternmatch AS pm1, patternmatch AS pm2 ...
) - dit is niet mogelijk met MEMORY-tabellen.
Vervolgens zou het voor u - en ook voor de database - gemakkelijker zijn om de LIKE '%xyz%'
toe te voegen rechtstreeks naar uw images
tabellen WHERE
clausule. Het zal hetzelfde doen zonder de overhead van het maken van een TEMP TABLE en het toevoegen ervan.
In ieder geval - het maakt niet uit welke kant je op gaat - dat WHERE zal verschrikkelijk traag zijn. Zelfs als u een index toevoegt op images.name
je hebt hoogstwaarschijnlijk LIKE '%xyz%'
. nodig in plaats van LIKE 'xyz%'
, zodat de index niet wordt gebruikt.
Nee. :)
Alternatieve opties
MySQL heeft een ingebouwde Fulltext-Search (sinds 5.6 ook voor InnoDB) die je zelfs die score kan geven:ik raad je ten zeerste aan om het te lezen en te proberen. U kunt er zeker van zijn dat de database beter weet dan u hoe u die zoekopdracht efficiënt kunt uitvoeren.
Als u MyISAM gaat gebruiken in plaats van InnoDB, houd dan rekening met de vaak over het hoofd geziene beperking dat FULLTEXT-zoekopdrachten alleen iets opleveren als het aantal resultaten minder is dan 50% van het totale aantal tabelrijen.
Andere dingen waar je misschien naar zou willen kijken, zijn bijvoorbeeld Solr (Leuke introductie voor dat onderwerp zelf zou het begin zijn van http://en.wikipedia.org/wiki/Apache_Solr ). We gebruiken het in ons bedrijf en het doet geweldig werk, maar het vereist nogal wat leren.
Samenvatting
De oplossing voor uw huidige probleem zelf (de zoekopdracht) is om de FULLTEXT-mogelijkheden te gebruiken.
Om u een cijfer te geven, 10.000 oproepen per seconde is al niet "triviaal" - met honderdduizenden zoekopdrachten per seconde zijn het soort prestatieproblemen dat u tegenkomt overal in uw set-up. Je hebt een paar servers, load balancing en tal van andere geweldige technische onzin nodig. En een daarvan is bijvoorbeeld Solr;)