Note that there are some explanatory texts on larger screens.

plurals
  1. POMysql query optimization
    primarykey
    data
    text
    <p>HI im running socialengine3 and need optimization on the a custom Mutual friends query. Its currently taking 15 seconds to execute</p> <p><strong>Friends table</strong></p> <p>friend_id<br> friend_user_id1<br> friend_user_id2<br> friend_status<br> friend_type</p> <p><strong>users</strong> </p> <p>user_id</p> <p><img src="https://i.stack.imgur.com/tEEsW.jpg" alt="enter image description here"></p> <h1>Edited</h1> <p>I have converted in into exists and still its now executing in 20 seconds.</p> <p>below is the updated query.</p> <pre><code> SELECT friendlist.friend_user_id2, se_users.username, se_users.id, se_users.image, se_users.name, se_users.surname, count( * ) AS mutral_friends FROM `se_friends` friendlist INNER JOIN `users` se_users ON friendlist.friend_user_id2 = `se_users`.id WHERE EXISTS ( SELECT se.friend_user_id2 FROM se_friends se WHERE se.friend_user_id1 = '105012' AND se.friend_status = '1' AND se.friend_user_id2 = friendlist.friend_user_id1 ) AND NOT EXISTS ( SELECT se1.friend_user_id2 FROM `se_friends` se1 WHERE se1.friend_user_id1 = '105012' AND friendlist.friend_user_id2 = se1.friend_user_id2 ) AND NOT ( friendlist.friend_user_id2 = '105012' ) AND friendlist.friend_status = '1' GROUP BY friendlist.friend_user_id2, se_users.username, se_users.id, se_users.image, se_users.name, se_users.surname ORDER BY mutral_friends DESC LIMIT 0 , 20 </code></pre> <h1>Orignal query</h1> <pre><code>SELECT DISTINCT `se_friends`.friend_user_id2, se_users.username, se_users.id, se_users.image, se_users.name, se_users.surname, count(*) as mutral_friends FROM `se_friends` INNER JOIN `users` se_users` ON `se_friends`.friend_user_id2=`se_users`.id WHERE (se_friends.friend_user_id1 &lt;&gt; '30355' or se_friends.friend_user_id2 &lt;&gt; '30355') AND se_friends.friend_user_id1 IN (SELECT se_friends.friend_user_id2 FROM `se_friends` WHERE se_friends.friend_user_id1='".$user_id."' AND se_friends.friend_status='1') AND `se_friends`.friend_user_id2 NOT IN (SELECT se_friends.friend_user_id2 FROM `se_friends` WHERE se_friends.friend_user_id1='".$user_id."' ) AND NOT(se_friends.friend_user_id2='".$user_id."') AND se_friends.friend_status='1' GROUP BY `se_friends`.friend_user_id2, se_users.username, se_users.id, se_users.image, se_users.name, se_users.surname ORDER BY mutral_friends DESC LIMIT 0, 20 </code></pre>
    singulars
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    plurals
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    1. This table or related slice is empty.
 

Querying!

 
Guidance

SQuiL has stopped working due to an internal error.

If you are curious you may find further information in the browser console, which is accessible through the devtools (F12).

Reload