sql >> Database >  >> RDS >> Mysql

Optimaliseert MySQL subquery's automatisch?

Helaas is MySQL niet erg goed in het optimaliseren van subquery's met IN. Dit komt uit MySQL-documentatie :

Probeer in plaats daarvan een JOIN te gebruiken.

Omdat MySQL van binnenuit werkt, kun je MySQL soms misleiden door de subquery in weer een andere subquery te stoppen, zoals:

SELECT COUNT(*) FROM table_name WHERE device_id IN
     (SELECT * FROM (SELECT DISTINCT device_id FROM table_name WHERE NAME = 'SOME_PARA') tmp)

Dit is de JOIN-oplossing:

SELECT COUNT(DISTINCT t2.id) FROM table_name t1
  JOIN table_name t2
    ON t2.device_id = t1.device_id
  WHERE t1.NAME = 'SOME_PARA'

Merk op dat ik van binnenuit begin en ook naar buiten ga.



  1. Recursieve opmerkingen implementeren in PHP/MySQL

  2. Hoe een ingevoegde waarde voor trigger te krijgen

  3. 4 manieren om erachter te komen welke kolommen worden geretourneerd door een opgeslagen procedure in SQL Server

  4. PDB Ontkoppel ORA-17528 Fout