首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >使用组时MySQL慢速查询

使用组时MySQL慢速查询
EN

Stack Overflow用户
提问于 2019-02-07 09:46:51
回答 2查看 56关注 0票数 0

我使用两个表将包连接到船运:

代码语言:javascript
运行
复制
CREATE TABLE `packages` (
  `package` int(11) NOT NULL,
  `shipping` int(11) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;

ALTER TABLE `packages`
  ADD PRIMARY KEY (`package`,`shipping`);
COMMIT;

船型

代码语言:javascript
运行
复制
CREATE TABLE `shippings` (
  `id` int(11) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;

ALTER TABLE `shippings`
  ADD PRIMARY KEY (`id`);

ALTER TABLE `shippings`
  MODIFY `id` int(11) NOT NULL AUTO_INCREMENT;COMMIT;

问题是,当我试图将包裹连接到船运和分组时,例如在每次运输中计数包裹时:

代码语言:javascript
运行
复制
SELECT s.id,COUNT(*) packages
FROM shippings s
INNER JOIN packages p ON s.id=p.shipping
GROUP BY s.id

使用5K运输和10K包记录,查询需要超过10s才能执行,也许我缺少了一些键或索引?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2019-02-07 10:08:49

您可能需要为packages.shipping添加一个索引。您所拥有的主键索引将不会在查询中使用,因为它将包作为第一级。

或者,您可以更改包表中主键列的顺序,但这取决于其他查询使用表的顺序。

票数 2
EN

Stack Overflow用户

发布于 2019-02-07 23:41:27

代码语言:javascript
运行
复制
SELECT s.id,COUNT(*) packages
FROM shippings s
INNER JOIN packages p ON s.id=p.shipping
GROUP BY s.id

可以简化为

代码语言:javascript
运行
复制
SELECT p.shipping AS id,
       COUNT(*) AS packages
FROM packages p
GROUP BY p.shipping

从这里开始,您需要一些以shipping开头的索引。您可以交换PK中列的顺序,也可以添加INDEX(shipping)

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54570440

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档