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

Czy MySQL może używać indeksów, gdy między warunkami jest OR?

Plan zapytań dla OR wielkość liter wskazuje, że MySQL rzeczywiście używa indeksów, więc ewidentnie tak, może to zrobić, przynajmniej w tym przypadku. Wydaje się to całkiem rozsądne, ponieważ istnieje indeks seen i id jest PK.

Jeśli „logiczne i rozsądne wyjaśnienia” są sprzeczne z rzeczywistością, można bezpiecznie założyć, że logika jest błędna lub wyjaśnienia są błędne lub nie mają zastosowania. Wydajność jest bardzo trudna do przewidzenia; testowanie wydajności jest niezbędne tam, gdzie ważna jest szybkość.

Powinieneś użyć tego, który testuje szybciej na danych wejściowych, które odpowiednio modelują to, co program zobaczy w rzeczywistym użyciu.

Pamiętaj jednak, że Twoje dwa zapytania nie są semantycznie równoważne:jeśli wiersz z id = 5204 również seen = 3 następnie OR zapytanie zwróci je raz, ale UNION ALL zapytanie zwróci go dwukrotnie. Nie ma sensu wybierać między poprawnym kodem a nieprawidłowym kodem na jakiejkolwiek podstawie innej niż ta, która jest poprawna.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. virtualenv, który może znaleźć przeniesione biblioteki (np. mysqlclient lib dla MySQLdb)

  2. Django + MySQL - Strona administracyjna - Dodaj użytkownika - OperationalError - SAVEPOINT nie istnieje

  3. Klauzula LIMIT MySQL równoważna dla serwera SQL SERVER

  4. Jaki jest najbezpieczniejszy sposób dodania html/css/js do mysql?

  5. Aplikacja do inżynierii wstecznej MySQL i PostgreSQL DB?