mysql 表与 max() 连接

标签 mysql join indexing max min

我在使用 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`),
)

最佳答案

b:  INDEX(cID, ID)

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

b 的 Key_len 是 5。这与表定义不一致;有些东西被简化了太多。

关于mysql 表与 max() 连接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41931277/

相关文章:

java - 使用 jdbctemplate 进行插入/更新

PHP/MySQL : If Else condition doesn't work as expected

PHP MySQL (MariaDB) 查询中断

sql - Postgresql - 将连接产生的列作为单个 json 列返回

mysql - 非常大的表 JOIN 与 GROUP BY

java - 使用单独的开始/结束字符连接字符串

tsql - 在内存优化表上使用索引

c++ - 来自 vector C++ 中字节表示的 Int

python - Python3 中的列表索引是如何工作的?

mysql - 调用 DriverManager.getConnection() 时出现意外的 java.lang.NoClassDefFoundError