1.模糊查询
业务中常用的输入框模糊查询(放在最前面)
like concat('%',#{name,jdbcType=VARCHAR},'%');
_:表示单个字符: like '张_';
[]:表示括号中所列字符的一个,指定一个范围:like '[张李赵孙]_';
[^]:表示不是括号中所列字符的一个:like '[^张李赵孙]_';
SQL中不能使用加号进行字符串拼接,加号是用来运算的
SQL中占位符不能在单引号中,否则会以?进行查询数据
Mybatis进行拼串,会出现sql注入的情况
#和\是一个意思,表示转义:使用#代替\
like '%#%%' escape '#'
like '%@%%' escape '@'
尽量使用右模糊查询,左模糊查询会导致数据库引擎放弃索引进行全表扫描
避免使用IN,NOT IN,OR,会导致引擎全表扫描
查询条件使用<>,!=也会使数据库放弃索引进行全表扫描
多表关联查询时,小表在前,大表在后,调整where子句中的顺序,自上而下,自左向右
简而言之,查询数据时最大化利用索引,尽可能避免全表扫描,减少无效数据的返回是我们在写sql过程中必须考虑的。另外在策略上我们还可以减少对数据库的访问,减少交互次数,减少对服务器CPU开销,利用更多资源等进行优化。
2.NIO模式主要有三大核心部分:Channel(通道),Buffer(缓冲区),Selector(选择器)
基于Channel和Buffer进行操作
数据总是从通道到缓冲区,或者从缓冲区中写入到通道中,Selector用于监听多个通道的事件(比如:连接打开数据到达),单个线程可以监听多个通道
IO是面向流的,而NIO是面向缓冲区的:NIO中的缓冲区存在使我们可以在其中对数据进行操作,增加灵活性,IO的各种流是阻塞的,NIO的非阻塞模式。
IO中的stream是单向的,NIO中的channel是双向的,既可以读又可写,NIO中的channel的主要表现有:IO,TCP,UDP