【发布时间】:2016-09-22 19:03:45
【问题描述】:
我目前正在编写一个运行良好但速度非常慢的查询。我真的不知道如何进一步加快速度。我没有看到可以设置的任何索引,也没有看到任何更改查询以加快查询速度而不破坏查询的方法。
关于数据结构:我有对象,可以属于房间、公寓或楼层。房间总是属于公寓,公寓总是属于楼层。听起来很复杂但实际上并不复杂,这就是层次结构:
- 建筑(这是我实际上必须为这个查询得到的)
- 地板
- 公寓
- 房间
- 对象(可以属于任何 2、3 或 4)
这是我目前的查询:
SELECT
whatever
FROM Object AS o
LEFT JOIN Room AS r AS r.id = o.Room_id
LEFT JOIN Apartment AS a
ON a.id = o.Apartment_id
OR a.id = r.Apartment_id
LEFT JOIN Floor AS f
ON f.id = o.Floor_id
OR f.id = r.Floor_id
OR f.id = a.Floor_id
JOIN Building AS b ON b.id = f.Building_id
/* some conditions concerning the Building */
此查询大约需要 17 秒。可以接受的是
【问题讨论】:
-
请发布一些示例数据
-
首先,您有几个昂贵的外连接。其次,每个连接都有 OR,这可能无济于事。此外,您应该对查询运行解释计划,您可能会丢失一些索引。
标签: mysql performance join conditional-statements