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

Jak powiedzieć Optymalizatorowi MySQL, aby używał indeksu w tabeli pochodnej?

Rozwiązaniem tego problemu jest MySQL Server 5.6 — wersja zapoznawcza (w momencie pisania tego tekstu).

http://dev.mysql.com /doc/refman/5.6/en/from-clause-subquery-optimization.html

Chociaż nie jestem pewien, czy Optymalizator MySQL ponownie użyje już istniejących indeksów, gdy „doda indeksy do tabeli pochodnej”

Rozważ następujące zapytanie:

SELECT * FROM t1JOIN (SELECT * FROM t2) AS pochodny_t2 ON t1.f1=derived_t2.f1;

Dokumentacja mówi:„Optymalizator konstruuje indeks nad kolumną f1 z pochodną_t2, jeśli pozwoliłoby to na użycie dostępu do referencji dla planu wykonania o najniższych kosztach”.

OK, to świetnie, ale czy optymalizator ponownie wykorzystuje indeksy z t2? Innymi słowy, co by było, gdyby istniał indeks dla t2.f1? Czy ten indeks jest ponownie używany, czy też optymalizator odtwarza ten indeks dla tabeli pochodnej? Kto wie?

EDYTUJ: Najlepszym rozwiązaniem do MySQL 5.6 jest utworzenie tabeli tymczasowej, utworzenie indeksu dla tej tabeli, a następnie uruchomienie zapytania SELECT w tabeli tymczasowej.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. ckfinder php 2.6.2 widok ustawień, wyświetlanie, sortowanie nie działa

  2. Dynamiczne budowanie zapytań PDO

  3. #1062 – Zduplikowany wpis „” dla klucza „unique_id” podczas próby dodania UNIQUE KEY (MySQL)

  4. Policz wystąpienia na podstawie kilku warunków dla dwóch tabel

  5. Python:ValueError:nieobsługiwany znak formatu ''' (0x27) w indeksie 1