在MySQL中,我应该为多个request_id添加哪种类型的索引?

3

当我按指定日期搜索时,数据加载时间太长。我的项目有两个表,一个表中有唯一条目,并且我为“request_id”添加了唯一索引和自动增量的“id”主索引。另一个表具有多个记录,并具有request_id,我仅添加了自动增量的“id”的主索引。现在,我要通过连接这两个表来搜索所有记录,以检查每个“request_id”的计数。
我正在使用以下查询:

SELECT 
       m.id,m.request_id as id,count(m.request_id) as count,m.reqtype,m.request_time,w.status as status,w.updated_time as updated_time,w.reg_date as reg_date
                FROM 
                    multi_requests m JOIN unique w ON m.request_id = w.request_id 
                WHERE
                    m.request_time

                Between
                    '2015-07-05'
                AND
                    '2015-07-06' 
                GROUP BY
                    m.request_id
                ORDER BY 
                    m.id asc
                LIMIT 
                    0,10" ;

我还尝试在multi_requests表中为"request_id"添加索引。但是当我添加索引到"request_id"并使用上面的查询进行搜索时,在用户界面上没有显示任何记录。

multi_requests表中的总记录数为6033030。 请给我提些建议。


MySQL和SQL Server不兼容,选择其中一个。 - Mihai
1个回答

1
这是您的查询:
SELECT m.id, m.request_id as id, count(m.mac_address) as count, m.reqtype, 
       m.request_time, w.status as status, w.updated_time as updated_time,
       w.reg_date as reg_date
FROM multi_requests m JOIN
     unique w
     ON m.mac_address = w.mac_address 
WHERE m.request_time Between '2015-07-05' AND '2015-07-06' 
GROUP BY m.request_id
ORDER BY m.id asc
LIMIT 0, 10 ;

这有点奇怪,因为在 select 中有很多列,但在 group by 中只有一列。假设您知道自己在做什么。
对于此查询,最好的索引是在 multi_requests(request_time, mac_address, request_id)unique(mac_address) 上。

实际上我要在UI上显示所有记录的报告,所以我在选择中使用了大量列。 - anilPrajapati
我在表“unique”中为mac_address添加了唯一索引,但是我现在无法理解在其他列multi_requests(request_time, mac_address, request_id)上应该添加什么类型的索引,就像你在注释中展示的那样。 - anilPrajapati
抱歉,我在我的帖子中犯了一个错误,现在我已经用request_id代替mac_address进行了编辑。 - anilPrajapati
感谢您的回答,@GordenLinoff。 - anilPrajapati

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接