Domanda

i) tra questi due che uno è più efficiente:

Select A.* from A, B where A.b_id = B.id

o

Select A.* from A where A.b_id in (select id from B);

ii) come fa Select A.* from A where A.b_id in (select id from B); Lavora davvero? È tradotto internamente in qualcosa di simile Select A.* from A, B where A.b_id = B.id o è (select id from B) valutato per ogni riga di a?

È stato utile?

Altri suggerimenti

Questo è più efficiente:

Select A.* from A, B where A.b_id = B.id

Sì, Select A.* from A where A.b_id in (select id from B) lavori.

E, no, (select id from B) non viene valutato per ogni riga. Viene valutato solo una volta.

Normalmente, i join sono più veloci dell'uso del IN operatore.

Non sono sicuro da dove provengano quel tipo di falsi join, ma dovresti unirti alle tabelle usando ON, non una massa di dove è alla fine.

SELECT A.*
FROM A
INNER JOIN B ON (A.b_id = B.id)

Dipende da vari fattori, tra cui la versione MySQL, le dimensioni delle tabelle, l'esistenza di indici, ecc.

Dovresti provare a eseguire EXPLAIN ..., o anche meglio se supportato, EXPLAIN EXTENDED ... seguito da SHOW WARNIGS; Per cercare di capire cosa sta facendo MySQL.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top