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