操作符优化
IN 操作符
用IN写出来的SQL的优点是比较容易写及清晰易懂,这比较适合现代软件开发的风格。
但是用IN的SQL性能总是比较低的,从ORACLE执行的步骤来分析用IN的SQL与不用IN的SQL有以下区别:
ORACLE试图将其转换成多个表的连接,如果转换不成功则先执行IN里面的子查询,再查询外层的表记录,如果转换成功则直接采用多个表的连接方式查询。由此可见用IN的SQL至少多了一个转换的过程。一般的SQL都可以转换成功,但对于含有分组统计等方面的SQL就不能转换了。
推荐方案:在业务密集的SQL当中尽量不采用IN操作符。
NOT IN操作符
此操作是强列推荐不使用的,因为它不能应用表的索引。
推荐方案:用NOT EXISTS 或(外连接+判断为空)方案代替
操作符(不等于)
不等于操作符是永远不会用到索引的,因此对它的处理只会产生全表扫描。
推荐方案:用其它相同功能的操作运算代替,如
a!=0 改为 a>0 or a<0
a!=’’ 改为 a>’’
IS NULL 或IS NOT NULL操作(判断字段是否为空)
判断字段是否为空一般是不会应用索引的,因为B树索引是不索引空值的。
推荐方案:
用其它相同功能的操作运算代替,如
a is not null 改为 a& ......
为了大家更容易理解我举出的SQL语句,本文假定已经建立了一个学生成绩管理数据库,全文均以学生成绩的管理为例来描述。
1.在查询结果中显示列名:
a.用as关键字:select name as '姓名' from students order by age
b.直接表示:select name '姓名' from students order by age
2.精确查找:
a.用in限定范围:select * from students where native in ('湖南', '四川')
b.between...and:select * from students where age between 20 and 30
c.“=”:select * from students where name = '李山'
d.like:select * from students where name like '李%' (注意查询条件中有“%”,则说明是部分匹配,而且还有先后信息在里面,即查找以“李”开头的匹配项。所以若查询有“李”的所有对象,应该命令:'%李%';若是第二个字为李,则应为'_李%'或'_李'或'_李_'。)
e.[]匹配检查符:select * from courses where cno like '[AC]%' (表示或的关系,与"in(...)"类似,而且"[]"可以表示范围,如:select * from courses where cno like '[A-C]%')
3.对于时间类型变量的处理
a.small ......
sql在多方摸索和朋友的帮助下,终于可以连接成功,这对我来说是个里程碑来的,在工作的过程中我总是没有机会可以碰触到SQL,当我鼓起勇气勇气想学习的时候我连怎么用都不会,进来终于链接成功,开心地和朋友分享我的成果。
1.安装sql,学习SQl,因为一般我是想要用于VS2005项目的,所以一般最后就先安装VS软件,以便可以互相兼容。然后再强制密码的时候按照其要求输入一个密码,然后把所有软件安装在本机目录里。安装之后打开sql server 里的配置工具,吧所有端口都启动,后进入sql server magament stdio express 里,用windows身份登录,修改安全里为sql以及windows登录模式,然后再登录名sa里,吧密码下面的强制密码的勾去掉,将密码改为sa,这个我试验成功,之所以使用sa,据说是方便不用验证密码就可以登录。
2.是说我在open问题上遇到的问题,就是我在vs项目里建立了一个数据库,在sql magament里添加后,居然使用不了,多次使用不可以。最后发现一个问题就是我将数据库添加进去的时候保存的名字是路径+数据库名称+后缀名,才导致调试失败。只要添加之后把数据库名称改为我们建立的数据库名称。即可顺利登录。
呵呵……开心中。加油! ......
.NET中C#的byte关键字映射.NET的Byte结构:表示一个 8 位无符号整数。Byte 值类型表示值介于 0 和 255 之间的无符号整数。
.NET中C#的short关键字映射.NET中的Int16:有符号 16 位整数,-32,768 到 32,767。
SQL SERVER中的tinyint:从 0 到 255 的整型数据。存储大小为 1 字节。
sbyte:存储8位带符号整数。sbyte中的s代表带符号(signed),意味着变量可为正值或负值。sbyte变量的最小可能值为-128,最大可能值为127。
byte:存储8位无符号整数。与sbyte变量不同,byte变量不带符号,并且只能存储正数值。byte变量的最小可能值为0,最大可能值为225。
short:存储16带符号整数。short变量的最小可能值为32768,最大可能值为32767。
int:存储32位带符号整数。int变量的最小可能值为-2147483648,最大可能值为2147683647。
uint:存储32位无符号整数。unit中的u代表无符号。uint变量的最小可能值为0,最大可能值为4294967295。
long:存储64位带符号整数。long变量的最小可能值为-9223372036845775808,最大可能值为9223372036845775807。
ulong:存储64位无符号整数。ulong中的u代表无符号。ulong变量的最小可能值为0,最大可能值为1844674407370955161 ......
利用飞信API实现公司内部发送短信可以省下不少钱.网上也有不少飞信API,但感觉不可靠,
还是自己写了一个简单的API.调用地址如下,不会记录飞信密码.
喜欢的朋友可以试试,结合AU3又写了个UDF.这下发短信方便很多了.
http://lab.l4ever.cn/fetion/api/?from=发送手机&pw=飞信密码&to=接收号码&msg=短信内容
传递的参数为UTF-8编码,注意调用API的时候注意地址,全部都小写,Linux服务器是区分大小写的,
返回参数有两段,用半角分号分割!返回的内容分别为:
发送状态;正常则返回接收号码|失败则返回错误原因
以下为Au3应用示范,保存为FetionSMS.au3,调用即可.
查看源代码打印帮助
01.; 本UDF用于利用飞信API发送免费短信,接收号码必须为发送号码的飞信好友放可发送
02.; UDF作者:L4EVER QQ:425145 http://L4EVER.cn
03.; 使用方法:FetionSMS("发送手机","飞信密码","接收手机","发送内容","返回值")
04.;===============================
05.; 使用演示:
06.; #include "FetionSMS.au3"
07.; msgbox(32,"飞信短信",FetionSMS("15999999999","l4ever.cn","15999999999","短信测试SMSTEST"))
08.;=========================== ......
这篇文章的出发点是我对插件机制的理解,及其在PHP中的实现。此方案仅是插件机制在PHP中的实现方案之一,写下来和大家分享,欢迎大家一起讨论。
插件,亦即Plug-in,是指一类特定的功能模块(通常由第三方开发者实现),它的特点是:当你需要它的时候激活它,不需要它的时候禁用/删除它;且无论是激活还是禁用都不影响系统核心模块的运行,也就是说插件是一种非侵入式的模块化设计,实现了核心程序与插件程序的松散耦合。一个典型的例子就是Wordpress中众多的第三方插件,比如Akimet插件用于对用户的评论进行Spam过滤。
一个健壮的插件机制,我认为必须具备以下特点:
插件的动态监听和加载(Lookup)
插件的动态触发
以上两点的实现均不影响核心程序的运行
要在程序中实现插件,我们首先应该想到的就是定义不同的钩子(Hooks);“钩子”是一个很形象的逻辑概念,你可以认为它是系统预留的插件触发条件。它的逻辑原理如下:当系统执行到某个钩子时,会判断这个钩子的条件是否满足;如果满足,会转而先去调用钩子所制定的功能,然后返回继续执行余下的程序;如果不满足,跳过即可。这有点像汇编中的“中断保护”逻辑。
某些钩子可能是系统事 ......