qlt*_*qlt 3 mysql sql performance join
与我的上一个问题(MySQLi性能,多个(单独)查询与子查询)相关,我遇到了另一个问题.
有时我使用子查询从另一个表中选择值(例如,连接到ID的用户名),但我不确定select-in-select,因为它看起来不是很干净我不确定性能.
子查询可能如下所示:
SELECT
(SELECT `user_name` FROM `users`
WHERE `user_id` = table2.user_id) AS `user_name`
, `value1`
, `value2`
FROM
`table2`
....
Run Code Online (Sandbox Code Playgroud)
对table1的结果使用单独的查询而对table2使用另一个查询是否"更好"(连接加倍,但不需要交叉表),或者我是否应该使用JOIN在单个查询中获取结果?
我对JOINS和子查询没有多少经验,所以我不确定在这种情况下JOIN是否会"太多",因为我真的只需要一个名称连接到一个ID(或者可能需要计算一个ID)来自表的行),或者如果没关系,因为select-in-select也被视为某种JOIN ...
JOIN的解决方案可能如下所示:
SELECT
users.user_name , table2.value1, table2.value2
FROM
`table2`
INNER JOIN
`users`
ON
users.user_id = table2.user_id
....
Run Code Online (Sandbox Code Playgroud)
如果我更喜欢JOIN,在这种情况下哪一个最好:左连接,内连接或其他什么?
事实上,你在询问是否使用inner join
或left join
确实表明你没有做过多少工作.
这两者的用途完全不同,inner join
用于从两个或多个表中返回列,其中某些列具有匹配值.left join
当您希望连接子句中指定的表中的行返回时,即使其他表中没有匹配的列,也会使用此选项.这取决于您的应用程序.如果一个表有玩家的名字,而另一个表包含他们支付的罚款的详细信息,那么你肯定会想要使用left join
,为没有罚款的玩家负责,因此在第二张表中没有记录.
至于是否使用子查询或者join
,join
S可快得多如果使用得当.通过适当地我的意思是,当有连接列上的索引,该表中包含的行数的顺序增加规定(通常,有可能是例外),在连接列有相似的数据类型,等等.如果所有这些条件匹配,join
将是更好的选择.
归档时间: |
|
查看次数: |
2355 次 |
最近记录: |