<div dir="ltr"><br><div class="gmail_extra"><br><div class="gmail_quote">Il giorno 17 aprile 2015 12:13, Gianni Carabelli <span dir="ltr"><<a href="mailto:giannicarabelli@gmail.com" target="_blank">giannicarabelli@gmail.com</a>></span> ha scritto:<br><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-color:rgb(204,204,204);border-left-style:solid;padding-left:1ex"><span class="">On 04/17/2015 11:56 AM, Mpuppeteer wrote:<br>
> SELECT *<br>
> FROM chat<br>
> WHERE ( (id_user = 1) OR (id_user_to = 1) )<br>
> AND created_at in (<br>
>         SELECT MAX(created_at)<br>
>         FROM chat<br>
>         WHERE id_chatconv in (<br>
>                 SELECT id_chatconv<br>
>                 FROM userchat WHERE id_user = 1<br>
>         )<br>
>         GROUP BY id_chatconv<br>
> )<br>
> ORDER BY (created_at) DESC;<br>
<br>
<br>
</span>Stai usando 2 "IN" che di solito sono il male.<br>
L'é il gran visir di tuci i terun!!<br>
<a href="https://wikis.oracle.com/pages/viewpage.action?pageId=27263381" target="_blank">https://wikis.oracle.com/pages/viewpage.action?pageId=27263381</a><br>
<br>
Senza indici e quando il traffico sarà alto, sarà un problema.<br>
Magari il traffico non l'avrai mai.. ma io molto spesso ho visto<br>
dbserver  andare KO per qualche query cannata.<br>
<br>
SELECT *<br>
FROM chat c<br>
JOIN userchat ON u.id_chatconv = c.id_chatconv<br>
<span class="">WHERE ( (id_user = 1) OR (id_user_to = 1) )<br>
</span>AND created_at = [boh.. questa parte non l'ho capita]<br>
<br>
e aggiungere gli indici.<br>
<br>
Oppure metti una query in più.<br>
Non è detto che con una query in più vai più piano.<br>
<br>
Ciao<br>
<br>
JohnnyRun<br>
<div class=""><div class="h5"><br>
--<br>
Mailing list info: <a href="http://lists.linux.it/listinfo/gl-como" target="_blank">http://lists.linux.it/listinfo/gl-como</a><br>
</div></div></blockquote></div><br></div><div class="gmail_extra">Certo gli indici vanno assolutamente inseriti.</div><div class="gmail_extra">Nell'esempio li ho tralasciati perché stavo solo provando.</div><div class="gmail_extra"><br></div><div class="gmail_extra">Non sapevo che "IN" era male... buono a sapersi... vedrò di ottimizzare il tutto...</div><div class="gmail_extra"><br></div><div class="gmail_extra">Comunque la query deve restituirmi la lista dell'ultimo messaggo di ogni conversazione ( One to One ) di un utente</div><div class="gmail_extra"><br></div><div class="gmail_extra">quindi la subquery del created_in trova la data maggiore ( ultimo messaggio inserito) di una conversazione.... Il secondo "IN" ottimizza il tutto trovando solo le date delle conversazioni di un utente. </div><div class="gmail_extra"><br></div><div class="gmail_extra">Indici a parte ( che inserisco :-) ) qui se vuoi trovi come funzica:</div><div class="gmail_extra"><a href="http://pastie.org/private/idcn8uwx3xw3jueochdotq">http://pastie.org/private/idcn8uwx3xw3jueochdotq</a><br></div><div class="gmail_extra"><br></div><div class="gmail_extra"><br></div><div class="gmail_extra">Gianni grazie !</div></div>