sql >> Databasteknik >  >> RDS >> Mysql

hur man optimerar den här frågan (4 mm tabeller involverade)

Du måste bli av med GROUP BY här.

MySQL är inte bra på att optimera det.

Skriv om din fråga så här:

SELECT  *
FROM    product_table
WHERE   EXISTS
        (
        SELECT  NULL
        FROM    product_table__category_1__mm mm_1
        JOIN    category cat_1
        ON      cat_1.uid = mm_1.uid_foreign
        WHERE   mm_1.uid_local = product_table.uid
                AND mm_1.uid_foreign IN (7, 8)
        )
        AND
        …        

Skapa indexen:

product_table__category_*__mm (uid_local, uid_foreign)

eller, bättre, förklara dem PRIMARY KEYsproduct_table__category_*__mm :

ALTER TABLE product_table__category_*__mm ADD CONSTRAINT pk_pc*mm_local_foreign (uid_local, uid_foreign)


  1. Gå med på samma bord mer än en gång

  2. Konvertera alla mysql-tabelldata till JSON i vårstart

  3. Hur härleddes denna logik för registreringar/fanout för fallet utan statistik i MySQL:s frågeplanerare?

  4. Är det möjligt för en underfråga att returnera två värden?