2013-09-14 3 views
1

Сначала вообще я Nood в SQL вещь, сейчас я работаю над классом проекта, где у меня есть несколько таблиц, какКак оптимизировать SQL-запрос больше?

Таблица пользователя

user_id | username | name 
    1  | nihan | Nihan Dip 
    2  |  dip | Meaw ghew 
    more | more  | more 

Таблица Friend

you | friend_id 
1  | 2 
1  | 27 
2  | 9 
more | more 

Таблица

user_id | follows 
    1  | 99 
    7  | 34 

Таблица пост

post_id | user_id | type | content | post_time 
    1  | 1  | text | loren toren | timestamp 
    2  | 2  | text | ipsum  | timestamp 

Теперь я хочу, чтобы получить сообщение от друга пользователей, и кто он следует и Offcourse его, так что я сделал это SQL

SELECT 
    username, name,content, post_time 
FROM 
    post 
     INNER JOIN 
    user ON user.user_id = post.user_id 
WHERE 
    post.user_id IN (SELECT 
      friend_id 
     FROM 
      friend 
     WHERE 
      you = 1 

     UNION ALL 

     SELECT 
      follows 
     FROM 
      follow 
     WHERE 
      user_id = 1) 
     OR post.user_id = 1 
ORDER BY post_time DESC 
LIMIT 10 

этот запрос работает нормально , Я просто хотел знать, есть ли оптимизация может быть выполнена? Тогда как? Пожалуйста, научите меня :)

+0

индексы ........ –

+0

post.user_id => индекс, post.post_time => индекс, user.user_id, имя пользователя => первичные и unque ключи, также каждые user_id являются FK для пользователя. user_id – ddiipp

ответ

2

Вместо использования IN попробуйте с JOIN добавить добавить еще несколько указателей.

SELECT DISTINCT u.name, u.username, 
     p.content, p.post_time 
FROM post p 
     INNER JOIN user u 
      ON u.user_id = p.user_id 
     INNER JOIN 
     (
      SELECT friend_id id 
      FROM friend 
      WHERE you = 1 
      UNION ALL 
      SELECT follows id 
      FROM follow 
      WHERE user_id = 1 
     ) s ON p.user_id = s.ID 
ORDER BY post_time DESC 
LIMIT 10 
+0

Немногие индексы где? любое предложение ? – ddiipp

+1

'friend.you' и' follow.user_id', так как вы ищете в этих полях. –

+0

Выполнено, каждый user_id индексирован. Спасибо за помощь – ddiipp

Смежные вопросы