sql >> Database teknologi >  >> RDS >> Mysql

Fra et præstationsperspektiv, hvor effektivt er det at bruge en midlertidig MySQL-tabel til en meget brugt hjemmesidefunktion?

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;)



  1. opdateringskommando afvises for brugeren

  2. 2 Autofuldførelse/forslagsindtastningsfelter ved hjælp af jQuery eller Ajax med anden boks baseret på første valg med flere elementer

  3. SQL Server svarende til MySQL enum datatype?

  4. Øjeblikkelig filinitialisering:Virkning under opsætning