相关疑难解决方法(0)

显式vs隐式SQL连接

在显式vs隐式内连接中是否存在效率差异?例如:

SELECT * FROM
table a INNER JOIN table b
ON a.id = b.id;
Run Code Online (Sandbox Code Playgroud)

SELECT a.*, b.*
FROM table a, table b
WHERE a.id = b.id;
Run Code Online (Sandbox Code Playgroud)

sql join

380
推荐指数
7
解决办法
16万
查看次数

SQL JOIN:USING,ON或WHERE有区别吗?

我想知道SQL在这些连接语句上执行的方式是否有任何不同:

SELECT * FROM a,b WHERE a.ID = b.ID

SELECT * FROM a JOIN b ON a.ID = b.ID

SELECT * FROM a JOIN b USING(ID)
Run Code Online (Sandbox Code Playgroud)

有性能差异吗?还是算法差异?

或者只是语法糖?

sql syntax performance expression join

38
推荐指数
1
解决办法
2万
查看次数

左加入表现优于内联?

我一直在我正在处理的应用程序中分析一些查询,并且我遇到了一个查询,它检索的行数超过了必要的数量,结果集在应用程序代码中被删除了.

将LEFT JOIN更改为INNER JOIN会将结果集修剪为所需的内容,并且可能也会更高效(因为选择的行数较少).实际上,LEFT JOIN'ed查询的表现优于INNER JOIN'ed,花费了一半的时间来完成.

LEFT JOIN :(总共127行,查询耗时0.0011秒)

INNER JOIN :(总共10行,查询耗时0.0024秒)

(我多次运行查询,这些是平均值).

在两者上运行EXPLAIN都没有解释性能差异:

对于INNER JOIN:

id  select_type     table   type    possible_keys   key     key_len     ref        rows     Extra
1   SIMPLE  contacts        index       NULL        name        302     NULL         235    Using where
1   SIMPLE  lists           eq_ref      PRIMARY     PRIMARY     4   contacts.list_id     1   
1   SIMPLE  lists_to_users  eq_ref      PRIMARY     PRIMARY     8   lists.id,const  1    
1   SIMPLE  tags            eq_ref      PRIMARY     PRIMARY     4   lists_to_users.tag_id   1    
1   SIMPLE  users           eq_ref      email_2     email_2     302     contacts.email 1    Using where
Run Code Online (Sandbox Code Playgroud)

对于LEFT JOIN:

id  select_type     table …
Run Code Online (Sandbox Code Playgroud)

mysql database performance join

15
推荐指数
2
解决办法
1万
查看次数

标签 统计

join ×3

performance ×2

sql ×2

database ×1

expression ×1

mysql ×1

syntax ×1