我有两张表,其中包含用户的日常活动。我有两个加入这些表并从该表中选择前十名。
表 1:构建日志
+----------------+------------------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+----------------+------------------------+------+-----+---------+----------------+
| NAME | varchar(50) | YES | | NULL | |
| ID | int(11) | NO | PRI | NULL | auto_increment |
| DATE_AND_TIME | datetime | YES | | NULL | |
| COMMENT | mediumtext | YES | | NULL | |
+----------------+------------------------+------+-----+---------+----------------+
行数:276186
表 2:报告
+---------------+--------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+---------------+--------------+------+-----+---------+----------------+
| r_id | int(10) | NO | PRI | NULL | auto_increment |
| id | int(15) | YES | UNI | NULL | |
| label | varchar(200) | YES | | NULL | |
+---------------+--------------+------+-----+---------+----------------+
行数:134058
如果我只使用这两个表的连接查询,使用id
它会很快。
查询 1:
select buildlog.id,reports.label from buildlog join reports on reports.id = buildlog.id limit 10\G
查询时间:10 行集合(0.01 秒)
如果我添加 order by 以获取最新的 10 个构建 ID,则标记执行需要 1 到 2 分钟。
查询 2:
select buildlog.id,reports.label from buildlog join reports on reports.id = buildlog.id order by buildlog.id desc limit 10\G
查询时间:10 rows in set (0.98 sec)
按列排序是主键buildlog.id
。那么,它已经被索引了,为什么执行这个查询需要更多时间?. 谁能建议我如何优化它?