mysql - 这是 MySQL 中的低效查询吗?

标签 mysql sql database indexing

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/

相关文章:

sql - 按邮政编码邻近度搜索 - MySql

php - 从datetime=now()显示mysql中的数据库

c# - 从数据库中提取数据的方法

mysql - 按多列分组后选择最大计数

c++ - Visual Studio 2017 中的 MySQL 连接器/C++ 错误 "Unresolved external symbol _get_driver_instance"

javascript - 如何通过填充从数据库获取的数据来自动在 HTML 表中创建行

mysql - SQL 中的 Long Boolean Where

sql - 使用内部联接更改此查询?

sql - 获取原因 (ORA-8102 "index key not found")

sql-server - 将keras模型保存到数据库