【发布时间】:2009-10-25 09:27:27
【问题描述】:
我用的是MySQL 5,需要做这句话才能得到结果。当我想到它时,这是第一次尝试。我知道有几种方法可以改进它,但我想先征求您的意见:
SELECT p.id, p.image, p.lat, p.lng,
p.category_id, p2.title, p2.description, c2.name
FROM place p
LEFT JOIN place_translation p2 ON p.id = p2.id
LEFT JOIN trip_place t ON p.id = t.place_id
LEFT JOIN category c ON p.category_id = c.id
LEFT JOIN category_translation c2 ON c.id = c2.id
WHERE c.root_id =1
AND c2.lang = 'en'
AND p2.lang = 'en'
AND t.trip_id =1
AND p.root_id =1
AND p.lft >39
AND p.rgt <44
ORDER BY p2.title
这是一项多语言服务,所以我们有place_translation 和category_translation。我们得到属于旅行和城市的地方(这是一个嵌套集,所以root_id、lft 和rgt)
索引是:
on table place: id, category_id
on table place_translation: id-lang index
on table trip_place: place_id, trip_id
on table category: id
on table category_translation: id-lang index
那么,根据您的经验,您将如何改进它以使其更小?我知道在遇到问题之前我不必进行非规范化;但我想打好基础。
谢谢!
【问题讨论】:
-
您在各个表上有哪些索引?
-
桌子上的地方:id,桌子上的类别_翻译:桌子上的id-lang索引trip_place:place_id,桌子上的trip_id类别:桌子上的id category_translation:id-lang索引
-
@fesja:建议您使用索引信息编辑问题...
标签: sql mysql performance join