我有两个表,其中包含用户的日常活动。我有两个连接这些表并从此表中选择前十个ID。
表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
。那么,它已被索引为什么需要更多时间来执行此查询? 。任何人都可以建议我如何优化它?
答案 0 :(得分:0)
SELECT * FROM (
SELECT
buildlog.id,
reports.label
FROM
buildlog
JOIN
reports
ON
reports.id = buildlog.id
) AS myval_new
ORDER BY id DESC limit 10
减速是因为它可能在进行连接之前选择进行排序。在外部查询中执行订单会强制它仅对所选项目进行排序。