Mysql Join vs Select里面选择

时间:2014-01-26 00:46:00

标签: mysql

我正在为我的iOS和iPad制作一些跟踪系统Android应用。我的mysql服务器在它有非常大的查询时重新启动(我不知道究竟有多少)。所以我在考虑表演。

我不知道它是否有帮助,但我的服务器每分钟可以处理超过500条语句

我的问题是:在同一个语句中选择(或更多)选择(或更多)两个会更快吗?

数据库:我有两个表,一个包含人们连接的设备,另一个表包含连接到我的应用的应用。

编辑:我的数据库在InnoDB上,主要和&自动增加索引到ID。和FK到deviceID& APPID

因此,当用户登录时,我需要检查他是否在服务器中注册。 (我在测试建议中使用SELECT *)

两个选择陈述

SELECT * FROM devicesApps WHERE appID='$idApp' and 
deviceID IN (SELECT id FROM devices WHERE fingerprint='$fingerprint')

加入

SELECT * FROM devicesApps da, devices d WHERE da.appID='$idApp' 
and da.deviceID=d.id and d.fingerprint='$fingerprint'

哪个更快或两者都相同?我只需要一排。

由于

2 个答案:

答案 0 :(得分:0)

它总是取决于索引搜索,扫描等多种因素。如果您有执行计划进行比较,您的答案将变得更加清晰。

答案 1 :(得分:0)

对于旧版本的MySQL,带有子查询的in不是最理想的,我认为问题已在最新版本中得到修复。

应使用显式连接语法编写带有join的版本。这不会影响性能,但它是首选的SQL语法:

SELECT *
FROM devicesApps da join
     devices d
     on da.deviceID = d.id
WHERE da.appID = '$idApp' and d.fingerprint = '$fingerprint';

顺便说一句,请注意,查询的两个版本执行相同的操作。如果有多个设备匹配,则第一个设备应用返回一行,第二个设备每个设备返回一行。

您可以使用其他索引加快查询速度,例如device(fingerprint, id)devicesApps(appId, deviceId)