任何人都可以幫助我提高查詢效率嗎? 我是SQL的初學者, ,據我所知有效率是使用索引或主鍵讓B樹搜索更快,因此,我已經設置了主鍵rid
和索引(Date, Time)
但是,我的查詢仍然效率太低,無法輸出結果。任何人都可以幫助我提高查詢效率嗎?
我試圖找到'2017-03-04'上間隔最大的傳感器(sid)。 這裏是我的代碼:
select tmp4.sid as largest_ivl_sensor
from
(
select tmp3.sid, MAX(tmp3.Dif) as max_for_each
from
(
select tmp1.sid, MIN(TIME_TO_SEC(DATE_SUB(tmp2.Time, INTERVAL tmp1.Time HOUR_SECOND))) as Dif
from
(
select se.sid, r.rid, r.Time
from (select rr.rid, rr.Time from records rr where rr.Date = '2017-03-04') as r, send se
where se.rid = r.rid
order by se.sid
) as tmp1
INNER JOIN
(
select se2.sid, r2.rid, r2.Time
from (select rr2.rid, rr2.Time from records rr2 where rr2.Date = '2017-03-04') as r2, send se2
where se2.rid = r2.rid
order by se2.sid
) as tmp2 ON tmp1.sid = tmp2.sid and TIME_TO_SEC(tmp1.Time) <= TIME_TO_SEC(tmp2.Time) and tmp1.rid <> tmp2.rid
GROUP BY tmp1.sid, tmp1.Time
) as tmp3
GROUP BY tmp3.sid
) as tmp4
group by tmp4.max_for_each
having tmp4.max_for_each = MAX(tmp4.max_for_each);
這裏是架構: 記錄
+-------------+-------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-------------+-------------+------+-----+---------+-------+
| rid | int(11) | NO | PRI | NULL | |
| Date | date | YES | MUL | NULL | |
| Time | time | YES | | NULL | |
| Humidity | double(5,2) | YES | | NULL | |
| Temperature | double(5,2) | YES | | NULL | |
| PM1 | int(11) | YES | | NULL | |
| PM10 | int(11) | YES | | NULL | |
| PM25 | int(11) | YES | | NULL | |
+-------------+-------------+------+-----+---------+-------+
發送
+-------+-------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-------+-------------+------+-----+---------+-------+
| sid | varchar(30) | NO | | NULL | |
| rid | int(11) | NO | PRI | NULL | |
+-------+-------------+------+-----+---------+-------+
下面是一個例子:
| rid |sid | Time |
| 1 | a | 00:00:00 |
| 2 | a | 00:01:00 |
| 3 | b | 00:05:00 |
| 4 | b | 00:07:00 |
| 5 | b | 00:11:00 |
| 6 | c | 00:00:00 |
| 7 | c | 00:03:00 |
| 8 | c | 00:04:00 |
慾望d結果:
| sid|
| b|
因爲它有最大間隔4分鐘
又如:
| rid |sid | Time |
| 1 | a | 00:00:00 |
| 2 | b | 00:11:00 |
| 3 | c | 00:04:00 |
| 4 | b | 00:07:00 |
| 5 | a | 00:01:00 |
| 6 | c | 00:00:00 |
| 7 | c | 00:03:00 |
| 8 | b | 00:05:00 |
謝謝你幫助我。
編輯您的問題並提供(1)樣本數據; (2)期望的結果; (3)解釋它在做什麼。從性能開始的地方是理解需要做什麼。 –
我猜測最大的區間意味着每天的某種連續區間。在這種情況下,請查看mysql中每組的rownumber。 – Mihai