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

Dlaczego STRAIGHT_JOIN tak drastycznie poprawia to zapytanie i co to oznacza, gdy jest napisane po słowie kluczowym SELECT?

STRAIGHT_JOIN wymusza kolejność łączenia tabel, więc table1 jest skanowany w zewnętrznej pętli i table2 w wewnętrznej pętli.

Optymalizator nie jest doskonały (choć wciąż całkiem przyzwoity), a najbardziej prawdopodobną przyczyną są przestarzałe statystyki.

Nie, tylko wtedy, gdy optymalizator jest zły. Może tak być, jeśli dystrybucja danych jest poważnie zniekształcona lub nie można jej poprawnie obliczyć (powiedzmy, dla indeksów przestrzennych lub pełnotekstowych).

Powinieneś zbierać statystyki, tworzyć plany w obie strony i rozumieć, co oznaczają te plany.

Jeśli to widzisz:

  1. Automatycznie wygenerowany plan nie jest optymalny i nie można go ulepszyć standardowymi sposobami,

  2. STRAIGHT_JOIN wersja jest lepsza, rozumiesz, że zawsze będzie i rozumiesz dlaczego zawsze będzie

, a następnie użyj STRAIGHT_JOIN .




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Przechowywanie określonych wartości daty/godziny dla użytkowników w różnych strefach czasowych

  2. java.sql.Rozszerzenie połączenia dla SSH

  3. Ograniczenie klucza podstawowego MySql z nazwą

  4. Nie można było nawiązać połączenia, ponieważ maszyna docelowa aktywnie je odrzuciła (PHP / WAMP)

  5. MySQL Create View, Replace View i Drop View Statements z przykładami