Mysql
 sql >> база данни >  >> RDS >> Mysql

Можете ли да индексирате подзаявки?

Преди всичко трябва да знаете, че създаването на временна таблица е абсолютно осъществимо решение. Но в случаите не е приложим друг избор, което не е вярно тук!

Във вашия случай можете лесно да увеличите заявката си като FrankPl посочено, защото и подзаявката, и основната ви заявка се групират по едно и също поле. Така че нямате нужда от никакви подзаявки. Ще копирам и поставям решението на FrankPl за пълнота:

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

Но това не означава, че е невъзможно да попаднете на сценарий, при който искате да можете да индексирате подзаявка. В кои случаи имате два избора, първият е да използвате временна таблица, както сте посочили сами, като съхранявате резултатите от подзаявката. Това решение е изгодно, тъй като се поддържа от MySQL за дълго време. Просто не е възможно, ако има огромно количество данни.

Второто решение е използването на MySQL версия 5.6 или по-нова . В последните версии на MySQL са включени нови алгоритми, така че индекс, дефиниран в таблица, използвана в рамките на подзаявка, може да се използва и извън подзаявката.

[АКТУАЛИЗИРАНЕ]

За редактираната версия на въпроса бих препоръчал следното решение:

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;

Но трябва да работите върху HAVING част. Може да се наложи да го промените според действителния си проблем.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Изберете редове за конкретна дата, като използвате TIMESTAMP тип данни

  2. Как да заявя колона JSON в MySQL

  3. Запазване на грешка в MySQL база данни

  4. Предотвратете повторно изпращане на формуляр след щракване върху бутона за връщане

  5. Възстановяване след грешна заявка за актуализиране на MySQL?