该查询很慢(大约 1.5 秒)。它应该只返回一个帖子列表
SELECT SQL_NO_CACHE p.id FROM 1_posts p 左连接 1_topics t ON (p.cid = t.cid AND p.container = t.id) 其中 t.cid = 1010699;
解释给出:
+----+-------------+--------+------+--------------- --------+------------+---------+---------------+--- ---+--------------+ | 编号 | 选择类型 | 表| 类型 | 可能的键 | 关键 | key_len | 参考 | 行 | 额外 | +----+-------------+--------+------+--------------- --------+------------+---------+---------------+--- ---+--------------+ | 1 | 简单 | 吨 | 参考 | 初级,cid | 西德 | 4 | 常量 | 216 | 使用哪里;使用索引 | | 1 | 简单 | p | 参考 | PRIMARY,cid,container | 集装箱 | 4 | forumdb.t.id | 49 | 使用位置 | +----+-------------+--------+------+--------------- --------+------------+---------+---------------+--- ---+--------------+
请注意,SQL_NO_CACHE 仅用于测试目的。
表的部分结构:
1_posts:
mysql> 解释 1_posts; +----------------+------------------------+------+-- ---+---------+----------------+ | 领域 | 类型 | 空 | 钥匙 | 默认 | 额外 | +----------------+------------------------+------+-- ---+---------+----------------+ | 西德 | int(20) 无符号 | 否 | 优先级 | 0 | | | 编号 | int(20) 无符号 | 否 | 优先级 | 空 | 自动增量 | | 集装箱 | int(20) 无符号 | 否 | 穆尔 | 0 | |
mysql>解释1_topics; +-----------------+----------+------+- ----+---------+----------------+ | 领域 | 类型 | 空 | 钥匙 | 默认 | 额外 | +-----------------+----------+------+- ----+---------+----------------+ | 西德 | int(10) 无符号 | 否 | 优先级 | 0 | | | 编号 | int(10) 无符号 | 否 | 优先级 | 空 | 自动增量 | | 集装箱 | 整数(20) | 否 | 穆尔 | 0 | |
表帖子有数百万个条目,主题大约有 500k。
两个表上的 cid 和 id 都是主组合键。cid 表示社区 ID。这些表格承载了许多不同的论坛。
感谢您在加快这件事上提供的任何帮助。