我在使用 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/