sql >> Databasteknik >  >> RDS >> Mysql

Optimerar MySQL underfrågor automatiskt?

Tyvärr är MySQL inte särskilt bra på att optimera subqueries med IN. Detta är från MySQL-dokumentation :

Testa att använda en JOIN istället.

Eftersom MySQL fungerar inifrån och ut, kan du ibland lura MySQL genom att linda in underfrågan i ytterligare en underfråga så här:

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

Här är JOIN-lösningen:

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'

Lägg märke till att jag börjar inifrån och går ut också.



  1. MySQL Hur infogar man i en tabell med en SELECT-underfråga som returnerar flera rader?

  2. Hur man installerar SQL * PLUS-klient i linux

  3. MySQL-fråga - använder SUM av COUNT

  4. PHP/mySQL - hur man hämtar kapslade rader till multidimensinal array