Det du anførte er fuldstændig korrekt, den midlertidige tabel vil kun være synlig for den aktuelle bruger/forbindelse. Alligevel er der nogle overhead og nogle andre problemer såsom:
- For hver af de tusindvis af søgninger, du vil oprette og udfylde den tabel (og slippe den senere) - ikke pr. bruger, pr. søgning. Fordi hver søgning højst sandsynligt vil genkøre scriptet, og "per session" betyder ikke PHP-session - det betyder databasesession (åben forbindelse).
- Du skal bruge
CREATE TEMPORARY TABLES
privilegium, som du måske ikke har. - Alligevel burde den tabel virkelig have MEMORY-typen, som stjæler din RAM mere, end den ser ud til. Fordi selv med VARCHAR, bruger MEMORY-tabeller rækkelagring med fast længde.
- Hvis din heuristik senere skal henvise til den tabel to gange (såsom
SELECT xyz FROM patternmatch AS pm1, patternmatch AS pm2 ...
) - dette er ikke muligt med MEMORY-tabeller.
Dernæst ville det være lettere for dig - og også for databasen - at tilføje LIKE '%xyz%'
direkte til dine images
tabeller WHERE
klausul. Det vil gøre det samme uden omkostningerne ved at oprette en TEMP TABLE og slutte sig til den.
I hvert fald - uanset hvilken vej du går - vil HVOR gå forfærdeligt langsomt. Også selvom du tilføjer et indeks på images.name
du har højst sandsynligt brug for LIKE '%xyz%'
i stedet for LIKE 'xyz%'
, så det indeks ikke bliver brugt.
Nej. :)
Alternative muligheder
MySQL har en indbygget Fuldtekst-søgning (siden 5.6 også for InnoDB), der endda kan give dig den scoring:Jeg anbefaler stærkt, at du læser den og prøver. Du kan være sikker på, at databasen ved bedre end dig, hvordan den søgning udføres effektivt.
Hvis du skal bruge MyISAM i stedet for InnoDB, skal du være opmærksom på den ofte oversete begrænsning, at FULLTEXT-søgninger kun returnerer noget, hvis antallet af resultater er mindre end 50 % af de samlede tabelrækker.
Andre ting, som du måske ønsker at se på, er for eksempel Solr (God introduktion til selve emnet ville være begyndelsen på http://en.wikipedia.org/wiki/Apache_Solr ). Vi bruger det i vores virksomhed, og det gør et godt stykke arbejde, men det kræver en del læring.
Oversigt
Løsningen på selve dit nuværende problem (søgningen) er at bruge FULLTEXT-funktionerne.
For at give dig et tal, er 10.000 opkald pr. sekund ikke allerede "trivielt" - med hundredtusindvis af søgninger pr. sekund er den slags præstationsproblemer, du vil støde på, overalt i dit set-up. Du får brug for et par servere, belastningsbalancering og tonsvis af andet fantastisk teknisk lort. Og en af disse vil for eksempel være Solr;)