哪个索引可以确保此查询快速运行?

问题描述 投票:0回答:1

您好,我有3个表personroomsroom_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
mysql sql database indexing inner-join
1个回答
0
投票

嗯。 。 。

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进行排序。

© www.soinside.com 2019 - 2024. All rights reserved.