【问题标题】:mysql table join with max()使用 max() 连接 mysql 表
【发布时间】:2017-06-15 08:05:21
【问题描述】:

我在使用 JOIN 和 MAX/MIN 进行查询时遇到问题。例如:

SELECT Min(a.date), Max(a.date) 
FROM a 
INNER JOIN b ON b.ID = a.ID AND b.cID = 5

是否可以添加索引或更改此查询结果更好? 下面是解释的结果

+----+-------------+----------+------+-----------------+-----+---------+-----------+--------+-----------------------+
| id | select_type | table    | type | possible_keys   | key | key_len | ref       | rows   | Extra                 |
+----+-------------+----------+------+-----------------+-----+---------+-----------+--------+-----------------------+
|  1 | SIMPLE      | b        | ref  | PRIMARY,cID     | cID | 5       | const     | 680648 | Using index           |
|  1 | SIMPLE      | a        | ref  | ID              | ID  | 5       | base.b.ID |      1 | Using index condition |
+----+-------------+----------+------+-----------------+-----+---------+-----------+--------+-----------------------+

抱歉,我不会把整张桌子都放在这里,这样会造成很多混乱。

CREATE TABLE `a` (
  `ID` int(11) NOT NULL,
  `date` datetime DEFAULT,
  PRIMARY KEY (`ID`),
  KEY `date` (`date`),
) 

CREATE TABLE `b` (
  `bID` int(11) NOT NULL,
  `ID` int(11)  NOT NULL,
  `cID` int(11) DEFAULT,
  PRIMARY KEY (`bID`),
  KEY `cID` (`cID`),
)

【问题讨论】:

  • 请尝试解释result was better。你的意思是获得更多的领域,更快,...?
  • 同时为所有相关表提供 SHOW CREATE TABLE 语句
  • 是的,我的意思是执行时间查询。我知道如何在单个查询中使用索引来加速结果 MAX 和 MIN,但我正在寻找 JOIN 版本的解决方案。

标签: mysql join indexing max min


【解决方案1】:
b:  INDEX(cID, ID)

将使它成为一个“覆盖”索引,因此它可能会更快地通过 680648 行。它应该替换当前的KEY(cID)

b 的 Key_len 为 5。这与表定义不一致;有些东西过于简化了。

【讨论】:

  • ^1 你能帮我解决这个问题吗stackoverflow.com/questions/41932151/…
  • 它没有帮助,因为需要获取 680648 行来查找最大值和最小值。通常,如果将 INDEX(cID, date) 添加到知道最大值和最小值的表中,工作变化很快,但它现在可以与 JOIN 一起使用。
  • @SilverRAT - cIDdate 好像在不同的表中,所以索引不起作用?
  • 我也这么认为,但我想确定一下,并从更有经验的人那里听到。感谢您的帮助@Rick James
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-04-02
  • 2015-05-24
  • 2021-10-24
  • 1970-01-01
  • 2013-01-14
  • 2017-02-12
  • 1970-01-01
相关资源
最近更新 更多