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

Jak wyjaśnić zapytanie z parametrami w MySQL?

Dopóki robisz tylko równe (a nie podobne, co może mieć wpływ na zwarcie), po prostu zastąp to wartością:

EXPLAIN SELECT foo FROM bar WHERE some_column = 'foo';

Ponieważ w rzeczywistości nie wykonuje zapytania, wyniki nie powinny różnić się od rzeczywistych. Są przypadki, w których to nieprawda (wspomniałem już LIKE). Oto przykład różnych przypadków LIKE :

SELECT * FROM a WHERE a.foo LIKE ?
  1. Parametr 1 ==Foo - Może użyć skanowania indeksu, jeśli indeks istnieje.
  2. Parametr 1 ==%Foo - Wymaga pełnego skanowania tabeli, nawet jeśli indeks istnieje
  3. Parametr 1 ==Foo% - Może użyć skanowania indeksu, w zależności od kardynalności indeksu i innych czynników

Jeśli dołączasz, a klauzula WHERE ulegnie niemożliwej kombinacji (a więc spowoduje zwarcie). Na przykład:

SELECT * FROM a JOIN b ON a.id = b.id WHERE a.id = ? AND b.id = ?

Jeśli pierwszy i drugi parametr są takie same, ma jeden plan wykonania, a jeśli są różne, spowoduje zwarcie (i zwróci 0 wierszy bez trafienia w żadne dane)...

Są inne, ale to wszystko, o czym mogę teraz myśleć z czubka głowy...



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Przekonwertować schemat MySQL na Github Wiki?

  2. Nie można utworzyć wyzwalacza MySQL, gdy używam IS NOT NULL

  3. Znajdź minimalną nieużywaną wartość w tabeli mysql

  4. wydajny pod względem pamięci wbudowany iterator/generator SqlAlchemy?

  5. Jak uzyskać wszystkie dane z 2 tabel za pomocą klucza obcego?