Mysql
 sql >> Baza danych >  >> RDS >> Mysql

Kiedy używać SQL_NO_CACHE

SQL_NO_CACHE

Po prostu dodaj SQL_NO_CACHE po części SELECT instrukcji SELECT i przed listą pól. Pierwsze zapytanie poniżej użyje pamięci podręcznej zapytań, jeśli jest włączona, a zapytanie jest buforowane:

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

Drugie zapytanie poniżej nie użyje pamięci podręcznej zapytań:

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

Jest to szczególnie przydatne podczas analizy porównawczej zapytania; jeśli pamięć podręczna zapytań jest włączona, chociaż pierwsze zapytanie może zająć trochę czasu, drugie i kolejne zapytania są prawie natychmiastowe. Używając SQL_NO_CACHE możesz mieć pewność, że pamięć podręczna zapytań nie jest używana i możesz bezpiecznie porównywać czasy wyników. Wskazówka SQL_NO_CACHE wyłącza wbudowany mechanizm buforowania zapytań MySQL dla konkretnego zapytania. Możesz pomóc MySQL w zwiększeniu wydajności pamięci podręcznej zapytań, korzystając z tej wskazówki w przypadku zapytań, które są bardzo dynamiczne (takich jak wyszukiwanie słów kluczowych lub raport, który jest uruchamiany tylko co noc). Upewnij się, że pamięć podręczna zapytań jest włączona, w przeciwnym razie nie ma takiej potrzeby polecenie.

jakie SQL_CACHE i SQL_NO_CACHE?

Opcje SQL_CACHE i SQL_NO_CACHE wpływają na buforowanie wyników zapytania w pamięci podręcznej zapytań. SQL_CACHE mówi MySQL, aby przechowywał wynik w pamięci podręcznej zapytań, jeśli można ją przechowywać w pamięci podręcznej, a wartość zmiennej systemowej query_cache_type wynosi 2 lub DEMAND. W przypadku SQL_NO_CACHE serwer nie używa pamięci podręcznej zapytań. Nie sprawdza pamięci podręcznej zapytań, aby zobaczyć, czy wynik jest już buforowany, ani nie buforuje wyniku zapytania. (Ze względu na ograniczenia parsera znak spacji musi poprzedzać i następować po słowie kluczowym SQL_NO_CACHE; niespacja, taka jak nowa linia, powoduje, że serwer sprawdza pamięć podręczną zapytań, aby zobaczyć, czy wynik jest już zbuforowany.)

NO_CACHE według mnie może być użyte jeśli 'CACHE' jest włączone i dane w db są aktualizowane dynamicznie, tzn. na buforze danych db nie można polegać np.:przechowując hash hasła użytkownika nie możemy polegać na CACHE ponieważ jest to częste możliwość zmiany danych

Aktualizacje przydatnych scenariuszy

1) wymuś nieużywanie pamięci podręcznej do testowania szybkości zapytania



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Wstaw dane do MySql DB i wyświetl, czy wstawienie zakończyło się sukcesem lub niepowodzeniem

  2. Usuń MySQL z Grupuj według

  3. Wymowny laravel, gdzie we wszystkim

  4. Aplikacja Xamarin dla systemu Android z internetową bazą danych MySql/Sql

  5. Włącz zdalne połączenie MySQL:BŁĄD 1045 (28000):Odmowa dostępu dla użytkownika