dai层的方法和@select那个先执行

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了dai层的方法和@select那个先执行相关的知识,希望对你有一定的参考价值。

1.语法顺序

select语句的语法格式如下。
select 字段列表
from 数据源
[ where条件表达式 ]
[ group by 分组字段
[ having条件表达式 ]
[ order by 排序字段 [ asc | desc ] ]

2.执行顺序

FROM 对FROM的左边的表和右边的表计算笛卡尔积。产生虚表VT1

ON 对虚表VT1进行ON筛选,只有那些符合的行才会被记录在虚表VT2中。

JOIN 如果指定了OUTER JOIN(比如left join、 right join),那么保留表中未匹配的行就会作为外部行添加到虚拟表VT2中,产生虚拟表VT3, rug from子句中包含两个以上的表的话,那么就会对上一个join连接产生的结果VT3和下一个表重复执行步骤1~3这三个步骤,一直到处理完所有的表为止。

WHERE 对虚拟表VT3进行WHERE条件过滤。只有符合的记录才会被插入到虚拟表VT4中。

GROUP BY 根据group by子句中的列,对VT4中的记录进行分组操作,产生VT5.

WITH CUBE or WITH ROLLUP 对表VT5进行cube或者rollup操作,产生表VT6.

HAVING 对虚拟表VT6应用having过滤,只有符合的记录才会被 插入到虚拟表VT7中。

SELECT 执行select操作,选择指定的列,插入到虚拟表VT8中。

DISTINCT 对VT8中的记录进行去重。产生虚拟表VT9.

ORDER BY 将虚拟表VT9中的记录按照<order_by_list>进行排序操作,产生虚拟表VT10.

TOP 取出指定行的记录,产生虚拟表VT11, 并将结果返回。

这些步骤执行时,每个步骤都会产生一个虚拟表,该虚拟表被用作下一个步骤的输入.这些虚拟表对调用者(客户端应用程序或者外部查询)不可用。只是最后一步生成的表才会返回 给调用者。

3.优化方法

1.join 方面

1.1.笛卡尔积:

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

假设集合A=a,b,集合B=0,1,2,则两个集合的笛卡尔积为(a,0),(a,1),(a,2),(b,0),(b,1), (b,2)

1.2.join类型

cross join 是笛卡尔积 就是一张表的行数乘以另一张表的行数

inner join 只返回两张表连接列的匹配项

left join 第一张表的连接列在第二张表中没有匹配,第二张表中的值返回null

right join 第二张表的连接列在第一张表中没有匹配,第一张表中的值返回null

full join 返回两张表中的行 相当于 left join + right join

在对两张表的所有join 时,都需要构造笛卡尔积

以下语句为例子

select a.name,b.name

from T_left a Left Join T_Right b //1步骤

ON a.id = b.id //2步骤

1步骤 首先对From子句中的前两个表,执行笛卡尔积运算。运算结果 形成一个结果集合。

2步骤 按照 on中的条件 ,对上一步骤的结果集进行筛选,形成新的结果集

left join 为例 如果在t_left中存在为匹配到的行,则 把这些行以外部的形式添加到上一步的结果集,形成新的结果集

多个 join 从左到右执行

总结:先生成笛卡尔积,然后on条件过滤,如果join是inner则执行where过滤,如果是left ,rigth ,full ,就把过滤掉的主表数据在添加回来,然后执行where过滤。

如果是使用left,right,full时, on中的条件不是最终过滤,因为后面又可能会添加回来,而where才是最终过滤

2.where 方面

2.1 where的执行顺序

mysq:条件执行顺序是 从左往右,自上而下的

SQL server、orcale:条件执行顺序是从右往左,自下而上
参考技术A @select会优先执行,因为它是一个更低级别的方法,它可以灵活地实现数据的聚合和选择。而其他的方法,比如@groupBy,@map,@filter等都是基于@select的,因此它们会在@select之后执行。 参考技术B  详细点说,以上T_SQL语句执行顺序如下:

  from [itcast] as i,[baidu] as b ,[google] as g   
  where b.国际知名度 = g.国际知名度 and b.国内推荐度 = i.国内推荐度
 group by [Rmb_MM]
  having count([Rmb_MM]) > 10kAnd84.8cm_59.2cm_86.4cm
  select [Rmb_MM] as CAUSE_LOVE
  order by CAUSE_LOVE
  top 10
  第一步,会把表itcast(m行数据)与表baidu(n行数据)这两张表取出进行笛卡尔交叉连接,得到一个虚拟表V1(m*n行数据)。这一步骤一次只会取出最多两个表的数据。如果有更加多的表,比如此处的表google,会放到下一轮。如果有外表连接outer join(left join|right join|full join),那么会给相应的左表或者右表打上一个标记,留给第三步用。

  第二步,会把以上得到的V1进行join_condition判断,只有令表连接条件(b.国际知名度 = g.国际知名度)为true的行才能得到保留,其他的行,全部米西米西。此处得到虚拟表V2。

  第三步,外连接,如果左表或者右表被打上了标记,那么把在第二步被移除的行添加回来。此处得到V3(该实例没有,请各位自行脑补吧)。然后,如果有更多的表,比如此处的表google,那么把V3当做第一张表,google作为第二张表,开始重复前三步。直到全部的表处理完毕。

  这就是为什么一般情况下TODO能用表连接就不用子查询——一种方式在前三步就全部完成,另一种方式必须把所有步骤都走一遍,前者自然比后者快。
  同样也是为什么在大型项目中不能够直接首步使用表连接——假设数据库有两张100w条数据的table,100w*100w得死。如果TODO没有首先经过筛选,那么将来老板会炒TODO的鱿鱼。

  第四步,会把以上最后得到的虚拟表进行where_condition筛选,只有令where筛选条件(比如:where salary>¥5000)为true的行才能得到保留,其他的行,死啦死啦的干活。然后的到V4.(该实例没有,同上)
参考技术C select 先执行没错,有结果了再来排序,个人觉得可以这样想,select 查询出来后,在显示id和name之前,先对age进行排序(这时所有的字段都还存在

ARP***和DAI

ARP***和DAI

一、 ARP ***原理:
ARP(Address Resolution Protocol,地址解析协议)是一个位于TCP/IP协议栈中的网络层,负责将某个IP地址解析成对应的MAC地址。

ARP***就是通过伪造IP地址和MAC地址实现ARP欺骗,能够在网络中产生大量的ARP通信量使网络阻塞,***者只要持续不断的发出伪造的ARP响应包就能更改目标主机ARP缓存中的IP-MAC条目,造成网络中断或中间人***。
ARP***主要是存在于局域网网络中,局域网中若有一台计算机感染ARP***,则感染该ARP***的系统将会试图通过“ARP欺骗”手段截获所在网络内其它计算机的通信信息,并因此造成网内其它计算机的通信故障。
***者向电脑A发送一个伪造的ARP响应,告诉电脑A:电脑B的IP地址192.168.0.2对应的MAC地址是00-aa-00-62-c6-03,电脑A信以为真,将这个对应关系写入自己的ARP缓存表中,以后发送数据时,将本应该发往电脑B的数据发送给了***者。同样的,***者向电脑B也发送一个伪造的ARP响应,告诉电脑B:电脑A的IP地址192.168.0.1对应的MAC地址是00-aa-00-62-c6-03,电脑B也会将数据发送给***者。
至此***者就控制了电脑A和电脑B之间的流量,他可以选择被动地监测流量,获取密码和其他涉密信息,也可以伪造数据,改变电脑A和电脑B之间的通信内容。
为了解决ARP***问题,可以在网络中的交换机上配置802.1x协议。
IEEE 802.1x是基于端口的访问控制协议,它对连接到交换机的用户进行认证和授权。在交换机上配置802.1x协议后,***者在连接交换机时需要进行身份认证(结合MAC、端口、帐户、VLAN和密码等),只有通过认证后才能向网络发送数据。***者未通过认证就不能向网络发送伪造的ARP报文。

技术分享图片
二、***演化
初期:ARP欺骗
这种有目的的发布错误ARP广播包的行为,被称为ARP欺骗。ARP欺骗,最初为***所用,成为***窃取网络数据的主要手段。***通过发布错误的ARP广播包,阻断正常通信,并将自己所用的电脑伪装成别人的电脑,这样原本发往其他电脑的数据,就发到了***的电脑上,达到窃取数据的目的。

中期:ARP恶意***
后来,有人利用这一原理,制作了一些所谓的“管理软件”,例如网络剪刀手、执法官、终结者等,这样就导致了ARP恶意***的泛滥。往往使用这种软件的人,以恶意破坏为目的,多是为了让别人断线,逞一时之快。
特别是在网吧中,或者因为商业竞争的目的、或者因为个人无聊泄愤,造成恶意ARP***泛滥。
随着网吧经营者摸索出禁用这些特定软件的方法,这股风潮也就渐渐平息下去了。

现在:综合的ARP***
最近这一波ARP***潮,其目的、方式多样化,冲击力度、影响力也比前两个阶段大很多。
首先是病毒加入了ARP***的行列。以前的病毒***网络以广域网为主,最有效的***方式是DDOS***。但是随着防范能力的提高,病毒制造者将目光投向局域网,开始尝试ARP***,例如最近流行的威金病毒,ARP***是其使用的***手段之一。
相对病毒而言,盗号程序对网吧运营的困惑更大。盗号程序是为了窃取用户帐号密码数据而进行ARP欺骗,同时又会影响到其他电脑上网。

三、遭受***:
ARP欺骗***的中毒现象表现为:使用局域网时会突然掉线,过一段时间后又会恢复正常。比如客户端状态频频变红,用户频繁断网,IE浏览器频繁出错,以及一些常用软件出现故障等。如果局域网中是通过身份认证上网的,会突然出现可认证,但不能上网的现象(无法ping通网关),重启机器或在MS-DOS窗口下运行命令arp -d后,又可恢复上网。
ARP欺骗***只需成功感染一台电脑,就可能导致整个局域网都无法上网,严重的甚至可能带来整个网络的瘫痪。该***发作时除了会导致同一局域网内的其他用户上网出现时断时续的现象外,还会窃取用户密码。如盗取QQ密码、盗取各种网络游戏密码和账号去做金钱交易,盗窃网上银行账号来做非法交易活动等,这是***的惯用伎俩,给用户造成了很大的不便和巨大的经济损失。
基于ARP协议的这一工作特性,***向对方计算机不断发送有欺诈性质的ARP数据包,数据包内包含有与当前设备重复的Mac地址,使对方在回应报文时,由于简单的地址重复错误而导致不能进行正常的网络通信。一般情况下,受到ARP***的计算机会出现两种现象:

1.不断弹出“本机的0-255段硬件地址与网络中的0-255段地址冲突”的对话框。
2.计算机不能正常上网,出现网络中断的症状。
因为这种***是利用ARP请求报文进行“欺骗”的,所以防火墙会误以为是正常的请求数据包,不予拦截。因此普通的防火墙很难抵挡这种***。

四、DAI技术:
ARP防范在全部是Cisco交换网络里,可以通过绑定每台设备的ip和mac地址可以解决.但是这样做比较麻烦,可以用思科 Dynamic ARP Inspection 机制解决.

思科 Dynamic ARP Inspection (DAI)在交换机上提供IP地址和MAC地址的绑定, 并动态建立绑定关系.
DAI 以 DHCP Snooping绑定表为基础,对于没有使用DHCP的服务器个别机器可以采用静态添加ARP access-list实现.
DAI配置针对VLAN,对于同一VLAN内的接口可以开启DAI也可以关闭.通过DAI可以控制某个端口的ARP请求报文数量.
通过这些技术可以防范"中间人"***.

五、DAI部署:
switch(config)#ip dhcp snooping vlan 7
switch(config)#ip dhcp snooping information option /默认
switch(config)#ip dhcp snooping
switch(config)#ip arp inspection vlan 7
/
定义对哪些 VLAN 进行 ARP 报文检测
switch(config)#ip arp inspection validate src-mac dst-mac ip
/对源,目mac和ip地址进行检查
switch(config-if)#ip dhcp snooping limit rate 10
switch(config-if)#ip arp inspection limit rate 15 /
定义接口每秒 ARP 报文数量
switch(config-if)#ip arp inspection trust /*信任的接口不检查arp报文,默认是检测

六、实施DAI后的效果:
在配置 DAI技术的接口上,如果没有进行静态绑定,用户端不能采用指定静态地址的方式将接入网络。
由于 DAI检查 DHCP snooping绑定表中的IP和MAC对应关系,无法实施中间人***,***工具失效。

下表为实施中间人***是交换机的警告:
3w0d: %SW_DAI-4-DHCP_SNOOPING_DENY: 1 Invalid ARPs (Req) on Fa5/16,
vlan 1.([000b.db1d.6ccd/192.168.1.200/0000.0000.0000/192.168.1.2
由于对 ARP请求报文做了速度限制,客户端无法进行认为或者病毒进行的IP扫描、探测等行为,如果发生这些行为,
交换机马上报警或直接切断扫描机器。如下表所示:
3w0d: %SW_DAI-4-PACKET_RATE_EXCEEDED: 16 packets received in 184 milliseconds on Fa5/30. **报警
3w0d: %PM-4-ERR_DISABLE: arp-inspection error detected on Fa5/30, putting Fa5/ 30 in err-disable state **切断端口
I49-4500-1#.....sh int f.5/30
FastEthernet5/30 is down, line protocol is down (err-disabled)
Hardware is Fast Ethernet Port , address is 0002.b90e .3f 4d (bia 0002.b90e .3f 4d)
MTU 1500 bytes, BW 100000 Kbit, DLY 100 usec,
reliability 255/255, txload 1/255, rxload 1/255
I49-4500-1#......

用户获取 IP地址后,用户不能修改IP或MAC,如果用户同时修改IP和MAC必须是网络内部合法的IP和MAC才可,对于这种修改可以使用下面讲到的 IP Source Guard技术来防范。下表为手动指定IP的报警:

3w0d: %SW_DAI-4-DHCP_SNOOPING_DENY: 1 Invalid ARPs (Req) on Fa5/30,
vlan 1.([000d.6078.2d95/192.168.1.100/0000.0000.0000/192.168.1.100/01:52:28 UTC Fri Dec 29 2000 ])。

以上是关于dai层的方法和@select那个先执行的主要内容,如果未能解决你的问题,请参考以下文章

Spring Aop中四个重要概念,切点,切面,连接点,通知

带嵌套的Sql语句执行顺序问题

android如何使用framework层的方法

Hibernate的merge()方法

Mybaits 源码解析 ----- Select 语句的执行过程分析(下篇)(Mapper方法是如何调用到XML中的SQL的?)全网最详细,没有之一

mybatis项目,在线程中调用Service和DAO层的方法时会报空指针