我有一个大约84mb左右的MySQL数据库。 以下查询:

SELECT     
    `reservations`.`id`
FROM       
    `reservations` 
INNER JOIN `reservation_room` 
ON         `reservation_room`.`reservation_id` = `reservations`.`id` 

LEFT JOIN  `users` 
ON         `reservations`.`user_id` = `users`.`id` 

INNER JOIN `rooms` 
ON         `reservation_room`.`room_id` = `rooms`.`id` 

INNER JOIN `stories` 
ON         `rooms`.`story_id` = `stories`.`id`

INNER JOIN `hotels` 
ON         `stories`.`hotel_id` = `hotels`.`id`

INNER JOIN `neighbourhoods` 
ON         `hotels`.`neighbourhood_id` = `neighbourhoods`.`id` 

INNER JOIN `cities` 
ON         `cities`.`id` = `neighbourhoods`.`city_id` 

GROUP BY   `reservations`.`id` 
ORDER BY   `reservations`.`created_at` DESC
LIMIT      30 
OFFSET     0

执行大约需要4到700秒。 reservations表有48k条记录, reservation_room有191k条记录。 该查询经常执行,这会使mysql进程在CPU上变得困难:

 PID USER      PR  NI  VIRT  RES  SHR S  %CPU %MEM    TIME+  COMMAND                                                                                                                                                                                                           
 5021 mysql    20   0  755m 385m 8596 S 748.7  1.2   5353:58 mysqld    

我该如何加快查询速度,或者至少不使整个mysql服务器发疯?

EXPLAIN上面的查询:

在此处输入图片说明

98%的执行时间是Copying to temp table

  ask by Devoted Enthusiast translate from so

本文未有回复,本站智能推荐:

2回复

一个简单的索引联接在两个需要很长时间的表上

我正在尝试执行以下选择: index1和index2是varchar(255)并已建立索引。 两个表都包含约5万行。 这个查询花了10分钟,我杀死了它,因为它的时间太长了。 为什么要花这么长时间?
2回复

具有内部联接的MySQL查询需要很长时间

尽管表中没有太多产品,但以下查询花费的时间太长。 如果我没有内部联接就查询它,一切都很好。 可以请其他人帮助找到问题或优化此查询。 这是表结构: 编辑:我尝试获取类别或其子类别中的所有产品。 有些产品有父母:假设有10种不同尺寸的牛仔裤。 其他人没有父母,但他们也不是孩子(孤儿)
1回复

MySQL:使用联接进行更新需要很长时间

我有一个更新语句,该语句使用连接的时间很长。 我将在下面提供更多详细信息,但这是查询: 背景故事:我正在尝试清理继承的数据库。 我有两个具有以下架构的表(仅显示重要的列): 引用: quote_line: 请注意,quote.id 不是键,但是quote.id + quote
1回复

在mysql中,简单的连接查询需要很长时间才能执行

使用join从三个不同的表中检索数据。join需要很长时间才能在mysql中执行。
1回复

执行SQLJOIN需要很长时间

我有三张桌子: 病人,妇产科医生和医生 。 请帮助我了解为什么要花费这么多时间(超过1分钟)。 当我不使用searchtxt时,我得到的时间更少了,但是,如果我在某些字段中使用searchtxt,则在检索结果时会遇到延迟。
2回复

需要从多个表中进行选择

所以,我的表如下(每个表中的主键是PhoneID,ManufacturerID和OSID。外键在名称前标有星号): 手机 生产厂家 OS 我需要做的基本上是一个查询,它将采用制造商名称和手机型号和其他细节并显示它。 例: 如果我有: 三星在制造商的制造商行中 从电话
1回复

如何从具有多个匹配值的JOIN的表中进行选择?

我有以下简单查询,当有一个关键字要匹配时,它可以正常工作: 我想做的是找到与我提供的至少两个关键字匹配的id 。 我以为只是添加一个简单的AND就可以,但结果却是空白。 显然,SQL不是我的强项,所以我在这里找错了我的帮助。 这是我的表结构:
1回复

选择具有双联接的多个表值

我有一个查询,它通过JOIN从不同的表中选择值。 但是我想我现在有一个问题,因为一个表需要再次使用不同的名称联接,但是以某种方式它不起作用。 一个基于社交网络结构的示例: 表“用户”: 表“帖子”: 表“用户标签”: 这是我的查询: 这就是我得到的结果: 问题:出现