sql语句中出现笛卡尔乘积
2017-01-09 10:01
561 查看
没有join条件导致笛卡尔乘积
学过线性代数的人都知道,笛卡尔乘积通俗的说,就是两个集合中的每一个成员,都与对方集合中的任意一个成员有关联。可以想象,在SQL查询中,如果对两张表join查询而没有join条件时,就会产生笛卡尔乘积。这就是我们的笛卡尔乘积导致的性能问题中最常见的案例:开发人员在写代码时遗漏了join条件。发生笛卡尔乘积的sql:
[sql] view plain copy
select sum(project_fj.danjia*project_fj.mianji) from project_fj,orderform where project_fj.zhuangtai='未售' and project_fj.project_id=30
这个语句其实只是sql语句的一部分,问题是另一部分用到了表orderform,所以from中有orderform,但是上面的这部分语句完全没有用到orderform,但是不设置条件就导致了笛卡尔乘积。
解决方法:使用LEFT JOIN
[sql] view plain copy
select sum(project_fj.danjia*project_fj.mianji) from project_fj LEFT JOIN orderform ON project_fj.id=orderform.project_id
where project_fj.zhuangtai='未售' and project_fj.project_id=30
相关文章推荐
- MYSQL优化
- MySQL Explain 结果解读与实践
- jsp页面显示数据库的数据信息表
- MySql Proccesslist filled with “Sleep” Entries leading to “Too many Connections”?
- 将TXT文件导入MySQL,统计重复数据
- oracle sql多条数据合并成一条,数据量大,用逗号隔开
- MySQL查看SQL语句执行效率
- 利用memcached配置session一致性另外一种方案
- 实现英文注册用户首字母大写
- 分布式缓存-Memcached
- jdbc连接数据库步骤
- memcached安装以及tomcat配置名称和session一致性配置
- 数据库 数据库SQL语句四
- dataset更新数据库
- Mysql 性能优化的20条经验
- MySQL创建数据库
- 在windows2003系统上安装两个版本的oracle
- Redis关于缓存雪崩和缓存穿透等问题
- MySQL 设计和命令行模式下建立详解
- MySQL学习笔记