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

Kdy použít SQL_NO_CACHE

SQL_NO_CACHE

Jednoduše přidejte SQL_NO_CACHE za část SELECT příkazu SELECT a před seznam polí. První dotaz níže použije mezipaměť dotazů, pokud je povolena a dotaz je v mezipaměti:

SELECT * FROM table WHERE search= 'keyword'; //lets take 1ms

Druhý dotaz níže nebude používat mezipaměť dotazů:

SELECT SQL_NO_CACHE * FROM table WHERE search= 'keyword'; //lets take ~0.2ms at 2nd time

To je užitečné zejména při srovnávání dotazu; pokud je povolena mezipaměť dotazů, ačkoli první dotaz může nějakou dobu trvat, druhý a následující dotazy jsou téměř okamžité. S použitím SQL_NO_CACHE si můžete být jisti, že se nevyužívá mezipaměť dotazů a můžete bezpečně porovnávat časy výsledků. Nápověda SQL_NO_CACHE vypne vestavěný mechanismus mezipaměti dotazů MySQL pro konkrétní dotaz. Můžete pomoci MySQL zefektivnit mezipaměť dotazů tím, že použijete tuto nápovědu u dotazů, které jsou vysoce dynamické (jako je vyhledávání klíčových slov nebo sestava, která se spouští pouze v noci). Ujistěte se, že je mezipaměť dotazů zapnutá, jinak to není potřeba. příkaz.

Co SQL_CACHE a SQL_NO_CACHE?

Volby SQL_CACHE a SQL_NO_CACHE ovlivňují ukládání výsledků dotazů do mezipaměti dotazů. SQL_CACHE říká MySQL, aby uložila výsledek do mezipaměti dotazů, pokud je cacheovatelná a hodnota systémové proměnné query_cache_type je 2 nebo DEMAND. S SQL_NO_CACHE server nepoužívá mezipaměť dotazů. Nekontroluje mezipaměť dotazů, aby zjistil, zda je výsledek již uložen do mezipaměti, ani neukládá do mezipaměti výsledek dotazu. (Vzhledem k omezení v analyzátoru musí před klíčovým slovem SQL_NO_CACHE a za ním následovat znak mezery; mezera, jako je nový řádek, způsobí, že server zkontroluje mezipaměť dotazů, aby zjistil, zda je výsledek již uložen do mezipaměti.)

NO_CACHE podle mého názoru lze použít, pokud je povolena 'CACHE' a data v db jsou dynamicky aktualizována, tj. nelze spoléhat na datovou mezipaměť db, např.:ukládání hash uživatelského hesla nemůžeme se spolehnout na CACHE, protože je častá možnost změny údajů

Aktualizace užitečných scénářů

1) vynutit nepoužívat mezipaměť pro testování rychlosti dotazu



  1. MYSQL:Uživatel - nastavení tabulky podrobností profilu - osvědčený postup

  2. Kdy musím na SQL Serveru použít Begin/End Blocks a klíčové slovo Go?

  3. nelze se připojit k dockeru mysql z místního

  4. Oracle (ORA-02270) :Pro tuto chybu seznamu sloupců neexistuje odpovídající jedinečný nebo primární klíč