比较这两个查询.将过滤器放在连接条件或are子句中是否更快.我一直认为它在连接标准上更快,因为它在最快的时刻减少了结果集,但我不确定.
我将构建一些测试来查看,但我也希望得到关于哪个更清晰易读的意见.
查询1
SELECT *
FROM TableA a
INNER JOIN TableXRef x
ON a.ID = x.TableAID
INNER JOIN TableB b
ON x.TableBID = b.ID
WHERE a.ID = 1 /* <-- Filter here? */
Run Code Online (Sandbox Code Playgroud)
查询2
SELECT *
FROM TableA a
INNER JOIN TableXRef x
ON a.ID = x.TableAID
AND a.ID = 1 /* <-- Or filter here? */
INNER JOIN TableB b
ON x.TableBID = b.ID
Run Code Online (Sandbox Code Playgroud)
编辑
我运行了一些测试,结果显示它实际上非常接近,但该WHERE条款实际上稍快一点!=)
我绝对同意在WHERE条款上应用过滤器更有意义,我只是对性能影响感到好奇.
已确认的时间标准: 143016 ms
已安排时间加入标准: 143256 ms
测试
SET …Run Code Online (Sandbox Code Playgroud) Sql语句.
1.select a.* from A a left join B b on a.id =b.id and a.id=2;
2.select a.* from A a left join B b on a.id =b.id where a.id=2;
Run Code Online (Sandbox Code Playgroud)
这两个sql语句有什么区别?
与WHERE子句相反,在连接中进行过滤是否有任何明显的性能参数?
例如,
SELECT blah FROM TableA a
INNER JOIN TableB b
ON b.id = a.id
AND b.deleted = 0
WHERE a.field = 5
Run Code Online (Sandbox Code Playgroud)
相反
SELECT blah FROM TableA a
INNER JOIN TableB b
ON b.id = a.id
WHERE a.field = 5
AND b.deleted = 0
Run Code Online (Sandbox Code Playgroud)
我个人更喜欢后者,因为我觉得过滤应该在过滤部分(WHERE)中完成,但是有任何性能或其他原因要做任何一种方法吗?
我重新设计了我的数据库结构,使用PRIMARY和FOREIGN KEY将我的3个表中的条目链接在一起,我在尝试编写查询以在另一个表中给定数据的一个表中选择数据时遇到问题.以下是我的3个CREATE TABLE语句的示例:
CREATE TABLE IF NOT EXISTS players (
id INT(10) NOT NULL AUTO_INCREMENT,
username VARCHAR(16) NOT NULL,
uuid VARCHAR(200) NOT NULL DEFAULT 0,
joined TIMESTAMP DEFAULT 0,
last_seen TIMESTAMP DEFAULT 0,
PRIMARY KEY (id)
);
/* ^
One |
To
| One
v
*/
CREATE TABLE IF NOT EXISTS accounts (
id INT(10) NOT NULL AUTO_INCREMENT,
account_id INT(10) NOT NULL,
pass_hash VARCHAR(200) NOT NULL,
pass_salt VARCHAR(200) NOT NULL,
created BIGINT DEFAULT 0,
last_log_on BIGINT DEFAULT 0,
PRIMARY KEY …Run Code Online (Sandbox Code Playgroud) 经过相当多的时间尝试和一些研究后,我终于投降并请求大家帮忙.这就是我的MySQL表格:
表格1:
Parent_ID | ID | Name | Quality |Price 1 | 001|Apple | good |1.50 1 | 002|Apple | medium |1.20 1 | 003|Apple | poor |0.99 2 | 004|Car | good |5000.00 2 | 005|Car | poor |200.00
表2:
Parent_ID | Var_Name | Value 1 | color | red 1 | size | big 1 | rating | 3 Star 2 | color | blue 2 | size | medium 2 | rating | ok
好的.太好了.我现在需要的是一个查询,它给了我:
Parent_ID | …
如何使用左连接在这里编写以下查询是我的示例查询
SELECT *
FROM STUDENT st
WHERE st.stdid not IN
( SELECT csch.stid
FROM courseSchedule csch, section sctn
WHERE cschno.sectno = sctn.sectno
AND cschno.college= sctn.college
AND sctn.college = st.college AND sctn.year = 2013 and sctn.semester = 'spring'
)
AND st.college = 1
Run Code Online (Sandbox Code Playgroud) sql ×5
mysql ×2
sql-server ×2
database ×1
inner-join ×1
join ×1
oracle ×1
syntax ×1
t-sql ×1
where ×1