sql相关优化

一、笛卡尔积介绍

1. 笛卡尔积全称笛卡尔乘积,笛卡尔乘积是指在数学中,两个集合XY的笛卡尔积(Cartesian product),又称直积,表示为X × Y,第一个对象是X的成员而第二个对象是Y的所有可能有序对的其中一个成员

2. 表达式为:A×B = {(x,y)|x∈A∧y∈B}

3. 笛卡尔积在SQL中的应用,常用表达式为:

  select * from 【表名,别名】,【表明,别名】 where 【别名.关联字段名=别名.关联字段名】

  case: select * from depart a,Person b where a.Id=b.departId

4. 具体示例如下:我新建了一个部门和一个人员表

5. 相关笛卡尔积的查询表达式以及相关运行结果如下:

 

 

 6. 注意事项:运用笛卡尔积表示式,其实就是类似于内连接查询,只不过不同的是,内连接查询会进行全表连接查询,而笛卡尔积查询首先运行的是后方的where条件进行过滤一遍,然后再进行乘积。这样可以更加有效的提高sql的查询效率,同时,如果需要进行左或者右连接查询时,就不能使用笛卡尔积查询,不然会导致最终的结果不正确。

二、sql进行优化

 1. sql的查询步骤: 先进行where条件的过滤,然后再进行select 字段的查询。所以sql 的优化应该首先放置在where条件的应用上。

 

 

 2. 应该避免在where条件中对null值进行判断,否则会导致进行全表查询。如:

  select id from where number is null

  应该给number赋初始值为0,然后修改为

  select id from where number=0

3. in 和 not in 也要慎用,否则会导致全表扫描,如:

  select id from t where num in(1,2,3)    
  对于连续的数值,能用 between 就不要用 in 了:    
  select id from t where num between 1 and 3

4. 应尽量避免在 where 子句中对字段进行表达式操作,这将导致引擎放弃使用索引而进行全表扫描。如:    
  select id from t where number/2=100    
  应改为:    
  select id from t where number=100*2  

5. 任何地方都不要使用 select * from t ,用具体的字段列表代替“*”

6. 用 exists 代替 in

  select num from a where num in(select num from b)    
  用下面的语句替换:    
  select num from a where exists(select 1 from b where num=a.num)

7.尽量使用inner join 查询,并且可以用笛卡尔积表达式进行替代。

posted @ 2019-12-28 00:05  锦大大的博客呀!  阅读(257)  评论(0编辑  收藏  举报