• 全连接的几种方式


     
     
    /* 
    CREATE TABLE A(id INT, NAME VARCHAR(30)) 
    CREATE TABLE B(id INT, marks VARCHAR(30)) 
     
    INSERT INTO A 
    SELECT 1,'周杰伦' union 
    SELECT 2,'周星驰' union 
    SELECT 3,'成龙' union 
    SELECT 4,'李连杰' union 
    SELECT 5,'洪金宝' union 
    SELECT 6,'李嘉诚' union 
    SELECT 7,'马甲'  
     
     
    INSERT INTO b 
    SELECT 1,12 union 
    SELECT 3,55 union 
    SELECT 5,56 union 
    SELECT 6,69 union 
    SELECT 11,28 union 
    SELECT 16,47 union 
    SELECT 25,57 
    */  
    /* 
    DBCC FREEPROCCACHE      
    DBCC FREESESSIONCACHE      
    DBCC FREESYSTEMCACHE('All')      
    DBCC DROPCLEANBUFFERS      
    exec sp_configure 'max server memory', 0      
    EXEC ('RECONFIGURE' )     
    */ 
     
    SET STATISTICS IO on 
                    
    EXEC [seequerytime] ' SELECT *   FROM   A  JOIN  B on  1=1
    /* 
    表 'A'。扫描计数 1,逻辑读取 7 次,物理读取 0 次,预读 0 次,lob 逻辑读取 0 次,lob 物理读取 0 次,lob 预读 0 次。 
    表 'B'。扫描计数 1,逻辑读取 1 次,物理读取 0 次,预读 0 次,lob 逻辑读取 0 次,lob 物理读取 0 次,lob 预读 0 次。 

    */ 
     
    EXEC [seequerytime] ' SELECT *   FROM   A INNER JOIN  B on 1=1
    /* 
    表 'A'。扫描计数 1,逻辑读取 7 次,物理读取 0 次,预读 0 次,lob 逻辑读取 0 次,lob 物理读取 0 次,lob 预读 0 次。 
    表 'B'。扫描计数 1,逻辑读取 1 次,物理读取 0 次,预读 0 次,lob 逻辑读取 0 次,lob 物理读取 0 次,lob 预读 0 次。 
    6*/ 
    EXEC [seequerytime] ' SELECT *   FROM   A left JOIN  B on 1=1
    /* 
    表 'B'。扫描计数 1,逻辑读取 7 次,物理读取 0 次,预读 0 次,lob 逻辑读取 0 次,lob 物理读取 0 次,lob 预读 0 次。 
    表 'A'。扫描计数 1,逻辑读取 1 次,物理读取 0 次,预读 0 次,lob 逻辑读取 0 次,lob 物理读取 0 次,lob 预读 0 次。 

    */ 
    EXEC [seequerytime] 'select * from A  LEFT OUTER JOIN B   on 1=1
    /* 
    表 'B'。扫描计数 1,逻辑读取 7 次,物理读取 0 次,预读 0 次,lob 逻辑读取 0 次,lob 物理读取 0 次,lob 预读 0 次。 
    表 'A'。扫描计数 1,逻辑读取 1 次,物理读取 0 次,预读 0 次,lob 逻辑读取 0 次,lob 物理读取 0 次,lob 预读 0 次。 

    */ 
    EXEC [seequerytime] ' SELECT *   FROM   A FULL JOIN  B on 1=1
    /* 
    表 'A'。扫描计数 2,逻辑读取 8 次,物理读取 0 次,预读 0 次,lob 逻辑读取 0 次,lob 物理读取 0 次,lob 预读 0 次。 
    表 'B'。扫描计数 2,逻辑读取 8 次,物理读取 0 次,预读 0 次,lob 逻辑读取 0 次,lob 物理读取 0 次,lob 预读 0 次。 
    10 
    */ 
    EXEC [seequerytime] ' select * from A CROSS APPLY B' 
    /* 
    表 'A'。扫描计数 1,逻辑读取 7次,物理读取 0 次,预读 0 次,lob 逻辑读取 0 次,lob 物理读取 0 次,lob 预读 0 次。 
    表 'B'。扫描计数 1,逻辑读取 1 次,物理读取 0 次,预读 0 次,lob 逻辑读取 0 次,lob 物理读取 0 次,lob 预读 0 次。 

    */ 
    EXEC [seequerytime] ' select * from A outer APPLY B' 
    /* 
    表 'A'。扫描计数 1,逻辑读取 7 次,物理读取 0 次,预读 0 次,lob 逻辑读取 0 次,lob 物理读取 0 次,lob 预读 0 次。 
    表 'B'。扫描计数 1,逻辑读取 1 次,物理读取 0 次,预读 0 次,lob 逻辑读取 0 次,lob 物理读取 0 次,lob 预读 0 次。 

    */ 
    EXEC [seequerytime] ' select * from A cross JOIN B' 
    /* 
    表 'A'。扫描计数 1,逻辑读取 7 次,物理读取 0 次,预读 0 次,lob 逻辑读取 0 次,lob 物理读取 0 次,lob 预读 0 次。 
    表 'B'。扫描计数 1,逻辑读取 1 次,物理读取 0 次,预读 0 次,lob 逻辑读取 0 次,lob 物理读取 0 次,lob 预读 0 次。 
    10 
    */ 
     
    EXEC [seequerytime] ' select * from A, B ' 
    /* 
    表 'B'。扫描计数 1,逻辑读取 7 次,物理读取 0 次,预读 0 次,lob 逻辑读取 0 次,lob 物理读取 0 次,lob 预读 0 次。 
    表 'A'。扫描计数 1,逻辑读取 1 次,物理读取 0 次,预读 0 次,lob 逻辑读取 0 次,lob 物理读取 0 次,lob 预读 0 次。 
    6。 
    */ 
     
    /* 
    DROP TABLE A 
    DROP TABLE B 
    */ 
     
     
     
     
    /* 
    alter proc [dbo].[seequerytime] @sql varchar(max)       
    as        
    set nocount on       
    declare @d datetime       
    set @d = getdate()       
    /*你的SQL脚本开始*/       
    exec (@sql)       
    /*你的SQL脚本结束*/       
    declare @result int       
    select  @result = datediff(ms, @d, getdate())        
    select  @result        
    print @result       
     
     
     
     
    */ 

    看见full join的 逻辑读取比其他方式多

  • 相关阅读:
    [自娱自乐] 4、超声波测距模块DIY笔记(四)——终结篇·基于C#上位机软件开发
    [新概念51单片机C语言教程·郭天祥] 1、 基础知识必备
    [起重机监测系统] 2、国标、架构及待测数据方案
    [自娱自乐] 3、超声波测距模块DIY笔记(三)
    [起重机监测系统] 1、基于无线传输的桥式起重机的安全监测方案
    [OpenCV] 3、直线提取 houghlines
    关于MySQL的行转列的简单应用
    java 模拟发送post请求测试
    拦截器通过Spring获取工厂类,注入bean对象
    springboot 表单校验
  • 原文地址:https://www.cnblogs.com/qanholas/p/1865016.html
Copyright © 2020-2023  润新知