SQL Server数据库没有JOIN条件导致笛卡尔乘积

数据库 SQL Server
在SQL查询中,如果对两张表JOIN查询而没有JOIN条件时,就会产生笛卡尔乘积,从而导致SQL性能下降。本文我们主要就介绍了这一过程的一个案例,希望能够对您有所帮助。

SQL Server数据库中,我们常常用到JOIN条件来对数据库进行连接查询,需要注意的一个问题就是没有JOIN条件会导致的笛卡尔乘积的问题。学过线性代数的人都知道,笛卡尔乘积通俗的说,就是两个集合中的每一个成员,都与对方集合中的任意一个成员有关联。可以想象,在SQL查询中,如果对两张表JOIN查询而没有JOIN条件时,就会产生笛卡尔乘积。这就是我们的笛卡尔乘积导致的性能问题中最常见的案例:开发人员在写代码时遗漏了JOIN条件。

发生笛卡尔乘积的sql:

  1. select sum(project_fj.danjia*project_fj.mianji) from project_fj,orderform  
  2. where project_fj.zhuangtai='未售' and project_fj.project_id=30 

这个语句其实只是sql语句的一部分,问题是另一部分用到了表orderform,所以from中有orderform,但是上面的这部分语句完全没有用到orderform,但是不设置条件就导致了笛卡尔乘积。

解决方法:

使用LEFT JOIN

  1. select sum(project_fj.danjia*project_fj.mianji) from project_fj LEFT JOIN orderform ON project_fj.id=orderform.project_id    
  2. where project_fj.zhuangtai='未售' and project_fj.project_id=30 

以上就是SQL查询中没有JOIN条件导致的笛卡尔乘积从而影响性能的一个案例,本文我们就介绍到这里了,希望本次的介绍能够给对您有所收获!

【编辑推荐】

  1. SQL Server数据库default value的使用总结
  2. SQL Server结合Mybatis调用存储过程返回结果集
  3. SQL Server数据库获取TEXT字段的内容长度的方法
  4. SQL Server 2008学习笔记之去重和给新加字段赋值
  5. SQL Server 2008中使用FileStream存取大文件实例介绍
责任编辑:赵鹏 来源: CSDN博客
相关推荐

2011-05-20 13:33:14

SQL

2022-11-07 08:51:24

数据库开发笛卡尔积

2010-07-15 17:28:50

SQL Server

2011-08-03 14:50:26

SQL Server数Visual Stud.MDF数据库文件

2021-05-17 06:57:34

SQLServer数据库

2010-07-08 11:05:14

SQL Server数

2010-07-01 11:03:04

SQL Server转

2021-05-08 14:07:26

SQLServer数据库

2011-03-24 09:24:08

SQL Server数还原

2011-03-24 09:45:34

SQL Server数恢复

2011-03-21 10:13:31

Sql Server数分区

2021-03-18 08:20:19

SQLServer数据库SQL

2011-03-24 09:07:11

SQL Server数备份

2010-06-30 11:16:50

SQL Server

2011-04-29 14:30:23

2009-03-19 09:44:07

SQL Server数据库迁移数据库

2011-04-01 17:05:44

SQL Server数日志

2010-06-28 10:06:09

SQL Server数

2010-08-27 09:59:51

SQL Server

2010-11-09 17:19:49

SQL Server导
点赞
收藏

51CTO技术栈公众号