mysql> desc posts_posts;
+------------+------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+------------+------------+------+-----+---------+----------------+
| id | int(11) | NO | PRI | NULL | auto_increment |
| user_id | int(11) | NO | MUL | NULL | |
| body | text | YES | | NULL | |
| created_at | datetime | YES | | NULL | |
| updated_at | datetime | YES | | NULL | |
| is_deleted | tinyint(1) | NO | | 0 | |
+------------+------------+------+-----+---------+----------------+
6 rows in set (0.06 sec)
mysql> desc posts_personas_assc;
+------------+----------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+------------+----------+------+-----+---------+----------------+
| id | int(11) | NO | PRI | NULL | auto_increment |
| post_id | int(11) | NO | MUL | NULL | |
| persona_id | int(11) | NO | MUL | NULL | |
+------------+----------+------+-----+---------+----------------+
3 rows in set (0.00 sec)
По сути, пользователь создает сообщения. К каждому сообщению могут быть прикреплены «персонажи». Другими словами, это отношения многие ко многим. (Есть еще одна таблица персон, которая здесь не показана)
Предположим, у меня есть 50 миллионов документов или около того. Я хочу выполнить этот запрос:
SELECT pp.id FROM posts_posts pp
INNER JOIN posts_persona_assc ppa ON pp.id = ppa.post_id
WHERE ppa.persona_id IN(id1, id2, id3)
AND start_time > pp.created_at
ORDER BY created_at DESC LIMIT num;
- Я, конечно, проиндексировал ppa.persona_id и pp.created_at
- часть "IN" никогда не будет иметь более 3 IDS.
Это будет достаточно эффективно для меня, чтобы выполнить этот запрос? Это будет достаточно быстро?
Этот запрос будет выполняться каждый раз, когда кто-нибудь посещает страницу профиля пользователя.