2011-03-03 60 views
0

我有一个meta表看起来像这样多个简单连接比。多简单的选择

ID  post_id  meta_key  meta_value 
1  1   key_01  val 
2  1   key_02  val 
3  1   key_03  val 

,我想所有的3个键和值。使用JOIN然后选择是否更慢? JOIN将使它容易得多,例如:

SELECT M1.meta_value AS key_01, M2.meta_value AS key_02, M3.meta_value AS key_04 
FROM `meta` AS M1 
    JOIN `meta` M2 ON M2.post_id = 1 AND M2.meta_key = 'key_02' 
    JOIN `meta M3 ON M3.post_id = 1 AND M3.meta_key = 'key_03' 
WHERE M1.meta_key = 'key_01' 

我没有测试任何,但你应该明白我的意思。

+0

为什么你需要这些列 - 这是一个更简单的查询,基于你想要的三个meta_key值来获取记录,并让你的应用程序适当地提取这些值。 – 2011-03-04 00:45:35

回答

1

I beleive JOINS比使用嵌套SELECTS更高效。索引外键列(连接列)也会提高性能。所以在post_id和meta_key上弹出一个索引。索引可能会伤害INSERT性能,因此请考虑这一点。

1

我认为mysql引擎有更好的机会来创建一个很好的查询计划时,使用连接比它做子选择和/或联合时。