zoukankan      html  css  js  c++  java
  • 数据库之笛卡尔积

    1.      什么是笛卡尔积

    1.1       定义

    笛卡尔积又叫笛卡尔乘积,是一个叫笛卡尔的人提出来的。
    简单的说就是两个集合相乘的结果。
    具体的定义去看看有关代数系的书的定义。
     直观的说就是
     集合A{a1,a2,a3} 集合B{b1,b2}
     他们的 笛卡尔积 是 A*B ={(a1,b1),(a1,b2),(a2,b1),(a2,b2),(a3,b1),(a3,b2)}
     任意两个元素结合在一起

    笛卡尔(Descartes)乘积又叫直积。假设集合A={a,b},集合B={0,1,2},则两个集合的笛卡尔积为{(a,0),(a,1),(a,2),(b,0),(b,1), (b,2)}。可以扩展到多个集合的情况。类似的例子有,如果A表示某学校学生的集合,B表示该学校所有课程的集合,则A与B的笛卡尔积表示所有可能的选课情况。

    1.2   SQLL笛卡尔积示例

    SELECT * FROM table1 , table2

    2.      什么场景会产生笛卡尔积

    笛卡尔积产生,有两种情况:

    1. 表连接缺少关联条件,这个是必须要改的;
    2. 表连接有关联条件,但是oracle判断用笛卡尔积更快,也会出现笛卡尔积,这个时候要看实际执行速度;oracle这样判断,一般是表比较小,这个时候要特别检查表的数据量是不是真的很少,以免oracle因为统计信息错误而误判。

    3.      SQL笛卡尔积的危害

    4.      如何避免SQL笛卡尔积

    Left join ,  hint

  • 相关阅读:
    ssi服务器端指令
    json格式的转换为json字符串函数
    接口测试基础和jmeter
    【JZOJ6274】梦境
    【JZOJ6275】小L的数列
    【luoguP4721】分治 FFT
    【luoguP3868】猜数字
    中国剩余定理与扩展中国剩余定理
    【JZOJ6277】矩阵游戏
    【JZOJ6271】锻造 (forging)
  • 原文地址:https://www.cnblogs.com/shoshana-kong/p/9150536.html
Copyright © 2011-2022 走看看