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)
基本上,用户创建帖子。每个帖子都可以附加“角色”。换句话说,这是一个多对多的关系。 (还有另一个角色表,这里没有显示)
假设我有 5000 万份文件 左右。我想运行这个查询:
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。
我运行这个查询是否足够高效?速度够快吗?
每次有人点击用户个人资料页面时都会运行此查询。
最佳答案
替代 IN 子句可能会给您更快的结果,请在 IN Slowness 查看 IN 变体
关于mysql - 这是 MySQL 中的低效查询吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8426863/