【发布时间】:2012-08-30 16:03:53
【问题描述】:
我有四个表(但我只会查询其中三个):
文章(文章是“项目”,类型 6): *a_id, a_title, a_text*
关键字(如果关键字是文章,则其类型为 6): *kw_id, kw_type*
关键字翻译 *kw_id, language_id, kw_name*
Conn_Item_Keyword(物品与关键字之间的多对多连接表): *kw_id, kw_type, item_id*
假设我要查询一篇ID为15的英文文章的所有关键词(language_id = 1)。
我可以这样写:
SELECT * FROM Conn_Item_Keyword c
LEFT JOIN Keywords k ON (c.kw_id = k.kw_id)
LEFT JOIN Keywords_Translation tr ON (c.kw_id = tr.kw_id)
WHERE c.kw_type = 6 AND c.item_id = 15 AND tr.language_id = 1
但在我看来它很慢,因为它将关键字连接到 Conn_Item_Keyword 的所有行。我在连接中尝试了多个条件(c.kw_id = k.kw_id AND c.kw_type = 6 AND c.item_id = 15),但我无法正确计算出来。
编写此查询的最佳方式是什么?
【问题讨论】:
-
“最优化”。 “最好的”。取决于许多其他因素:每个表中的记录数、定义的索引、存储引擎、MySQL 配置参数...
-
使用
EXPLAIN your_query了解有关 MySQL 如何执行查询的更多信息。
标签: mysql join query-optimization multi-table