在大量数据的情况下看看谁的效率高

lypalf 2009-12-22 02:55:34

A语句
select t1.name,t2.samount,t2.place
from users t1,
(
select name,parentid,sum(amount) samount,place
from users,CasinoRolling where users.name=CasinoRolling.usergroup
group by parentid,place
) t2 where t1.id=t2.parentid

//--------------------------------------
B语句
select t1.name,t2.amount,t2.place
from users t1 inner join
(
select parentid,sum(amount) as amount,place
from users inner join CasinoRolling ON (name=usergroup)
group by parentid,place
) t2 ON t1.id=t2.parentid
...全文
70 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
ACMAIN_CHM 2009-12-22
  • 打赏
  • 举报
回复


建议参考一下ANSI SQL92 或ANSI SQL 2003
或者MYSQL的官方文档。
http://dev.mysql.com/doc/refman/5.1/zh/sql-syntax.html#join
13.2.7.1. JOIN语法
WWWWA 2009-12-22
  • 打赏
  • 举报
回复
内连接

内连接(inner join)是应用程序中用的普遍的"连接"操作, 它一般都是默认的连接类型. 内连接基于连接谓词将两张表(如 A 和 B)的列组合在一起, 产生新的结果表. 查询会将 A 表的每一行和 B 表的每一行进行比较, 并找出满足连接谓词的组合. 当连接谓词被满足, A 和 B 中匹配的行会按列组合(并排组合)成结果集中的一行. 连接产生的结果集, 可以定义为首先对两张表做笛卡尔积(交叉连接) -- 将 A 中的每一行和 B 中的每一行组合, 然后返回满足连接谓词的记录. 实际上 SQL 产品会尽可能用其他方式去实现连接, 笛卡尔积运算是非常没效率的.

SQL 定义了两种不同语法方式去表示"连接". 首先是"显示连接符号", 它显示地使用关键字 JOIN, 其次是"隐式连接符号", 它使用所谓的"隐式连接符号". 隐式连接符号把需要连接的表放到 SELECT 语句的 FROM 部分, 并用逗号隔开. 这样就构成了一个"交叉连接", WHERE 语句可能放置一些过滤谓词(过滤条件). 那些过滤谓词在功能上等价于显式连接符号.

内连接"可以进一步被分为: 相等连接, 自然连接, 和交叉连接(见下).

程序要应该特别注意连接依据的列可能包含 NULL 值, NULL 值不与任何值匹配(甚至和它本身) -- 除非连接条件中显式地使用 IS NULL 或 IS NOT NULL 等谓词.

例如, 下面的查询通过 Employee 表和 Department 表共有的属性 DepartmentID 连接两表. 在两表 DepartmentID 匹配之处(如连接谓词被满足), 查询将组合两表的 LastName, DepartmentID 和DepartmentName 等列, 把它们放到结果表的一行(一条记录)里. 当 DepartmentID 不匹配, 就不会往结果表中生成任何数据.

显式的内连接实例:
SELECT *
FROM employee
INNER JOIN department
ON employee.DepartmentID = department.DepartmentID

等价于:
SELECT *
FROM employee, department
WHERE employee.DepartmentID = department.DepartmentID
ACMAIN_CHM 2009-12-22
  • 打赏
  • 举报
回复
另外第一个也不是 "隐式内连接"
ACMAIN_CHM 2009-12-22
  • 打赏
  • 举报
回复
一样。两个都会被MYSQL优化成相同的执行方案。 最多是 B 比 A快上 10-30 个CPU时钟周期。
wwwwb 2009-12-22
  • 打赏
  • 举报
回复
应该是一样的,都是内连接,第一个是隐式内连接

56,681

社区成员

发帖
与我相关
我的任务
社区描述
MySQL相关内容讨论专区
社区管理员
  • MySQL
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧