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

Czy możesz indeksować podzapytania?

Przede wszystkim musisz wiedzieć, że stworzenie tabeli tymczasowej jest absolutnie wykonalnym rozwiązaniem. Ale w przypadkach nie ma innego wyboru, co nie jest tutaj prawdziwe!

W Twoim przypadku możesz łatwo ulepszyć swoje zapytanie jako FrankPl wskazano, ponieważ podzapytanie i główne zapytanie grupują się według tego samego pola. Więc nie potrzebujesz żadnych podzapytań. Zamierzam skopiować i wkleić rozwiązanie FrankPl ze względu na kompletność:

SELECT o.property_B, SUM(o.score1), SUM(o.score2)
FROM o
GROUP BY property_B;

Nie oznacza to jednak, że nie można natknąć się na scenariusz, w którym chciałbyś zindeksować podzapytanie. W takich przypadkach masz dwie możliwości. Pierwszą z nich jest użycie tabeli tymczasowej, jak sam wskazałeś, zawierającej wyniki podzapytania. To rozwiązanie jest korzystne, ponieważ jest wspierane przez MySQL od dłuższego czasu. Jest to po prostu niewykonalne, jeśli w grę wchodzi ogromna ilość danych.

Drugim rozwiązaniem jest użycie MySQL w wersji 5.6 lub nowszej . W ostatnich wersjach MySQL zostały włączone nowe algorytmy, dzięki czemu indeks zdefiniowany w tabeli używanej w podzapytaniu może być również używany poza podzapytaniem.

[AKTUALIZACJA]

W przypadku edytowanej wersji pytania polecam następujące rozwiązanie:

SELECT o.property_B, SUM(IF(o.property_A = 'specific_A', o.score1, 0)), SUM(o.score2)
FROM o
GROUP BY property_B
HAVING SUM(IF(o.property_A = 'specific_A', o.score1, 0)) > 0;

Ale musisz popracować nad HAVING część. Być może trzeba będzie to zmienić zgodnie z rzeczywistym problemem.



  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:indeks złożony pełny tekst + btree?

  2. Jak WYBRAĆ losowe wiersze z tabeli z dokładną liczbą wierszy?

  3. Który model hierarchiczny powinienem użyć? Sąsiedztwo, zagnieżdżone czy wyliczone?

  4. NullPointerException — problem związany z zablokowaniem bazy danych podczas pobierania danych z bazy danych i przechowywania w tablicy

  5. TABELA UPUSZCZANIA Wstrzykiwań SQL nie działa