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

Mysql jest zbyt wolny w przypadku prostych zapytań między dwiema tabelami

W InnoDB każdy indeks zawiera niejawnie klucz główny.

Plan wyjaśniania pokazuje, że indeks IDX_NOME jest używany w tabeli Paziente . DBMS wyszukuje nazwę w indeksie i znajduje ID_PAZIENTE tam, co jest kluczem, którego potrzebujemy, aby uzyskać dostęp do drugiej tabeli. Więc nie ma nic do dodania. (W innym DBMS dodalibyśmy indeks złożony na (NOME, ID_PAZIENTE) aby tak się stało.)

Następnie jest tabela Analisi do rozważenia. Znajdujemy rekord przez FK_ANALISI_PAZIENTE który zawiera ID_PAZIENTE który jest używany do znalezienia dopasowania i niejawnie klucza głównego ID_ANALISI które można wykorzystać do uzyskania dostępu do tabeli, ale nie jest to nawet konieczne, ponieważ wszystkie potrzebne nam informacje znajdują się w indeksie. W tabeli nie ma już nic, co musimy znaleźć. (Ponownie, w innym DBMS dodalibyśmy indeks złożony na (ID_PAZIENTE, ID_ANALISI) mieć indeks pokrycia.)

Więc to, co się dzieje, to po prostu:przeczytaj jeden indeks, aby przeczytać drugi, aby policzyć. Idealny. Nie ma nic do dodania.

moglibyśmy zastąp COUNT(analisi0_.ID_ANALISI) z COUNT(*) ponieważ pierwszy mówi tylko "licz rekordy, gdzie ID_ANALISI is not null", co zawsze ma miejsce jako ID_ANALISI jest kluczem podstawowym tabeli. Więc prościej jest użyć tego ostatniego i powiedzieć „policz rekordy”. Jednak nie spodziewam się, że spowoduje to znaczne przyspieszenie zapytania, jeśli w ogóle.

Tak więc z punktu widzenia zapytań nie ma nic, co mogłoby to przyspieszyć. Oto kolejne rzeczy, które przychodzą mi do głowy:

  • Tabele partycjonowane? Nie, nie widziałbym w tym żadnej korzyści. Mogłoby być szybciej, gdyby zapytanie było wtedy wykonywane w równoległych wątkach, ale o ile wiem, nie ma równoległego wykonywania na wielu partycjach w MySQL. (Chociaż mogę się mylić.)
  • Defragmentować tabele? Nie, same tabele nie są nawet dostępne w zapytaniu.
  • Zostaje nam to:Kup lepszy sprzęt. (Przepraszam, że nie mam dla ciebie lepszej rady.)



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. MySQL - SQL_BIG_SELECTS

  2. Dodaj nową kolumnę do bazy danych wordpress

  3. Określanie nazwy zmiennej w klauzuli QUERY WHERE w JDBC

  4. Dlaczego ten kod SQL daje błąd 1066 (Nieunikalna tabela/alias:„użytkownik”)?

  5. #1222 — Użyte instrukcje SELECT mają różną liczbę kolumn