Mysql 多个简单联接与多个简单选择

Mysql 多个简单联接与多个简单选择,mysql,join,Mysql,Join,我有一个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会让它变得更简单,例如: SELECT M1.meta_value AS key_01, M

我有一个
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会让它变得更简单,例如:

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'

我没有做任何测试,但你应该明白了。

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

我相信连接比使用嵌套选择更有效。此外,索引外键列(联接列)也将提高性能。所以在post_id和meta_键上弹出一个索引。索引可能会影响插入性能,因此请考虑这一点。

为什么需要列的原样--根据所需的三个元键值获取记录,并让应用程序适当地提取这些值,这是一个更简单的查询。