sql >> Databáze >  >> RDS >> Mysql

Jak efektivní je z hlediska výkonu použití dočasné tabulky MySQL pro vysoce používanou funkci webu?

To, co jste uvedl, je zcela správné, dočasná tabulka bude viditelná pouze pro aktuálního uživatele/připojení. Přesto existují určité režie a některé další problémy, jako například:

  • Pro každé z tisíců vyhledávání, které se chystáte vytvořit, a vyplnit tuto tabulku (a později ji zahodit) – nikoli na uživatele, na vyhledávání. Protože každé vyhledávání s největší pravděpodobností znovu spustí skript a „za relaci“ neznamená relaci PHP – znamená relaci databáze (otevřené připojení).
  • Budete potřebovat CREATE TEMPORARY TABLES privilegium, které můžete nemám.
  • Přesto by tato tabulka skutečně měla mít typ MEMORY, který vám ukradne RAM víc, než to vypadá. Protože i když tabulky MEMORY mají VARCHAR, používají úložiště řádků s pevnou délkou.
  • Pokud vaše heuristika bude později potřebovat odkazovat na tuto tabulku dvakrát (například SELECT xyz FROM patternmatch AS pm1, patternmatch AS pm2 ... ) - u tabulek MEMORY to není možné.

Dále by pro vás – a také pro databázi – bylo jednodušší přidat LIKE '%xyz%' přímo na vaše images tabulky WHERE doložka. Udělá to samé bez režie vytváření TEMP TABLE a připojování k ní.

V každém případě – ať se vydáte kteroukoli cestou – to KAM bude strašně pomalé. I když přidáte index na images.name s největší pravděpodobností budete potřebovat LIKE '%xyz%' místo LIKE 'xyz%' , takže tento index nebude používán.

Ne. :)

Alternativní možnosti

MySQL má vestavěný Fulltext-Search (od 5.6 také pro InnoDB), který vám dokonce může dát toto hodnocení:Vřele doporučuji si to přečíst a vyzkoušet. Můžete si být jisti, že databáze ví lépe než vy, jak toto vyhledávání provádět efektivně.

Pokud se chystáte používat MyISAM místo InnoDB, uvědomte si často přehlížené omezení, že FULLTEXTOVÉ vyhledávání vrátí cokoliv, pouze pokud je počet výsledků menší než 50 % z celkového počtu řádků tabulky.

Další věci, na které byste se mohli chtít podívat, jsou například Solr (pěkný úvod k tomuto tématu samotnému by byl začátkem http://cs.wikipedia.org/wiki/Apache_Solr ). Používáme to v naší společnosti a odvádí skvělou práci, ale vyžaduje to docela dost učení.

Shrnutí

Samotné řešení vašeho aktuálního problému (vyhledávání) je použití funkcí FULLTEXT.

Abychom uvedli číslo, 10 000 hovorů za sekundu již není „triviální“ – se stovkami tisíc vyhledávání za sekundu jsou problémy s výkonem, se kterými se setkáte, všude ve vašem nastavení. Budete potřebovat pár serverů, vyvažování zátěže a spoustu dalších úžasných technických keců. A jedním z nich bude například Solr;)



  1. Woocommerce získat ID produktu pomocí SKU produktu

  2. PDO odmítá smazat řádek dat (v konkrétní tabulce)

  3. Jak RAND() funguje v MariaDB

  4. Jak připojit Javu k Mysql?