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

Dlaczego MySQL nie zawsze używa tutaj funkcji łączenia indeksów?

Wow! To najbardziej skomplikowane „scalanie indeksów”, jakie widziałem.

Zwykle (może zawsze ), możesz utworzyć indeks „złożony”, aby zastąpić przecięcie scalania indeksów i i działać lepiej . Zmień key2 od tylko (pinned) do (pinned, DeviceId) . To może pozbądź się „skrzyżowania” i przyspiesz je.

Ogólnie rzecz biorąc, Optymalizator używa scalania indeksów tylko w desperacji. (Myślę, że to jest odpowiedź na pytanie tytułowe.) Wszelkie drobne zmiany w zapytaniu lub wartościach, których dotyczy, Optymalizator wykona zapytanie bez łączenia indeksów.

Ulepszenie tabeli tymczasowej __codes jest zbudowanie stałej tabeli z dużym zakresem wartości, a następnie użycie zakresu wartości z tej tabeli w procedurze. Jeśli używasz MariaDB, użyj dynamicznie tworzonej tabeli „sekwencji”. Na przykład „tabela” seq_1_to_100 jest skutecznie tabela jednokolumnowa o numerach 1..100. Nie trzeba go deklarować ani wypełniać.

Możesz pozbyć się innych REPEAT pętla przez obliczanie czas od Code .

Unikanie LOOPs będzie największą zaletą wydajności.

Zrób to wszystko, a potem mogę mieć inne wskazówki.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Obetnij wszystkie tabele (z których większość ma ograniczenia). Jak tymczasowo je upuścić

  2. Skopiuj dane do nowej tabeli w MySQL

  3. Klucz obcy MySQL podczas usuwania

  4. Kiedy zamknąć połączenie MySQL używając node-mysql?

  5. Laravel $q->where() między datami