您好,我有3个表person
和rooms
,room_guests
。这些表中的每一个都有数百万行。我本质上只是想查找cus_num = 2342424324
一直在我的酒店住过的时间,以及他在下面的sql语句中住的房间(是我想要的)。但是,当我运行此语句时,它非常慢!我如何加快速度?老实说,我相当确定我的sql语句写得不好。是否有更好的sql语句(我认为INNER JOIN
可能很慢)?我知道我也可以创建索引,但是我不确定哪些列需要一起建立索引。
人
person_id | cus_num
----------------------
1 | 82736424
2 | 238748923
3 | 32424
4 | 2342424324
房间
room_id | name
----------------------
1 | Cool Room
2 | Hot Room
3 | Spring rooms
4 | apartment
room_guests
guest_id | room_id | person_id | last_update
----------------------------------------------------
1 | 1 | 3 | 2019-02-03 12:00:43
2 | 4 | 2 | 2020-04-23 19:30:53
3 | 2 | 3 | 2018-12-21 08:34:29
4 | 3 | 1 | 2020-11-15 10:04:08
5 | 3 | 4 | 2019-05-09 11:53:31
sql语句
SELECT rooms.name
FROM rooms
INNER JOIN room_guests ON rooms.room_id = room_guests.room_id
INNER JOIN person ON room_guests.person_id = person_id
WHERE person.cus_num = 2342424324
ORDER BY room_guests.last_update DESC
嗯。 。 。
SELECT r.name
FROM rooms r JOIN
room_guests rg
ON r.room_id = rg.room_id JOIN
person p
ON rg.person_id = p.person_id
WHERE p.cus_num = 2342424324
ORDER BY rg.last_update DESC
我建议在以下位置建立索引:
person(cus_num, person_id)
room_guests(person_id, room_id)
room(room_id)
这处理where
子句和join
。查询仍然需要对order by
进行排序。