Это неэффективный запрос в MySQL? - PullRequest
2 голосов
/ 08 декабря 2011
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.

Это будет достаточно эффективно для меня, чтобы выполнить этот запрос? Это будет достаточно быстро?

Этот запрос будет выполняться каждый раз, когда кто-нибудь посещает страницу профиля пользователя.

1 Ответ

0 голосов
/ 08 декабря 2011

Альтернатива предложению IN может дать вам более быстрый результат, проверьте изменение IN в IN Slowness

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...