11月5日:in和exist
首先,sql语句写法不一样,例如A和B两张表
in: select * from A where A.key in (select key from B);
exist:select * from A where exists (select 1 from B where A.key=B.key);
也就是说所有可以in写的sql都可以改变为用exists来写,通过在子查询中增加一个where子句。
其次,一般来说,exist的执行效率要比in高,尤其是表结构复杂,查询条件多的情况下,
所以对初学者来说,搞不清楚具体的机制(也就是我这种没有实际动手写过复杂sql,仅限于理论阶段)
,最好就养成习惯,写sql的时候,多打几个字,尽量不使用in,而使用exist,所谓惹不起,躲得起。
下面是今天看到的感觉比较权威的,因为有实验数据,有兴趣的tx可以看看。
http://hi.baidu.com/huaiwen/blog/item/951f273527daf83c5bb5f51b.html
SQL语句编写注意问题:
1、IS NULL 与 IS NOT NULL:不能用NULL作索引,任何包含NULL值得烈将不会被包含在索引中,即使对某列建了索引,只要该列中有一行含有NULL,该列也会在索引中排除,不会提高性能。
2、联接列:对有联接的列,即使最后一个联接值为一个静态值,优化器也不会使用索引,如下两个效果相同的SQL语句:
Select * From TABLENAME Where ID = 'USER' And NAME = 'STATUS'
Select * From TABLENAME Where ID||''||NAME = 'USERSTATUS'
对第二句来说,优化器没有使用NAME列的索引,而第一句则可以使用到两列的索引,如果在NAME列有索引的情况下,第一句的效率就会比较高。
3、带统配符号‘%’的LIKE语句:通配符出现在首位置,则ORACLE系统不能使用到该列索引,如果出现在其他位置,优化器则可以利用索引。如:
SELECT * FROM TABLENAME WHERE ID LIKE '%TION%';
SELECT * FROM TABLENAME WHERE ID LIKE 'DICTION%';
第一句索引没有起作用,第二句可以起作用。即便有时候不能避免第一种情况,也应该心中有数,通配符如何使用效率能更高。
4、ORDER BY语句:任何在ORDERBY语句的非索引项或者有计算表达式都将降低查询速度。
5、NOT:如下WHERE子句很常见:Where Not(Status = 'VALID')或者Where Status <> 'VALID',例如:
Select * From Employee Where Salary <> 3000;
对这个查询,可以改写为不使用NOT:
Select * From Employee Where Salary < 3000 Or Salary > 3000;
虽然查询结果一样,但后者比前一种查询方案更快。后者允许对SALARY列使用索引,前者不允许。
6、使用函数:如果不是用基于函数的索引,那么WHERE子句中对存在索引的列使用函数时,优化器会忽略这些索引。
7、比较不匹配的数据类型:如下,Account_Number是一个varchar类型
Select Bank_Name, Address, City, State, Zip From Banks Where Account_Number = 990354;
oracle会自动把where子句变成To_Number(Account_Number) = 990354,这样就限制了索引的使用,改成下面的查询就可以使用索引:
Select Bank_Name, Address, City, State, Zip From Banks Where Account_Number = '990354';
11月11日:java基础
1、java中内存划分为3个区域:
1)、栈:存放局部变量和静态变量
2)、堆:存放对象,也就是我们new出来的对象,每当我们执行new操作,就在堆区申请了一块内存,创建了一个对象。
3)、代码区:放的是一些类对象的引用,类似c中的指针
String s1="sss";
String s2="sss";
s1.equalss2=?
答案是true,因为,java中存在一个字符串池,每次会到池中寻找,找到即指向已存在的,没有则创建一个。
String s1 = new String("sss");
String s2 = new String("sss");
s1.equalss2=?
答案是false,这个很明显,s1和s2是两个对象,如上所说,两个语句均在堆中新创建了对象。
String s1="sssaa";
String s2="aa"
String s2="sss"+s2;
s1.equalss2=?
答案是false,当表达式中存在变量,也会在堆中重新创建对象
2009-11-12 定位系统瓶颈
1、jdk1.6提供了一个内存监控工具jvisualvm,在jdk的bin目录下面。可以用来察看程序运行时候的性能瓶颈。
2、默认的Thread本身初始化在1.4是将自己加入了一个ThreadGroup,如果你没有调用它的start方法,JVM不会在该线程结束后将这个thread从TreadGroup中移除,这就是造成内存泄露的原因所在。 结论:低版本的jdk在使用线程时,可能会造成内存泄漏,最好使用runnable而不是thread。
2009-11-23:web开发
1、document.all[]:是文档中所有标签组成的一个数组变量,包括了文档对象中所有元素。
1)、document.all[]这个数组可以访问文档中所有元素。如下方式:
var i,origLength;
origLength = document.all.length;
document.write('document.all.length='+origLength+"<br />");
for (i = 0; i < origLength; i++)
{
document.write("document.all["+i+"]="+document.all[i].tagName+"<br />");
}
2)、访问文档中的一个特定元素,比如文档中有一个DIV,例如:
<div id="docid" name="docname"></div>
你可以通过这个DIV的ID,NAME或INDEX属性访问这个DIV:
document.all["docid"]
document.all["docname"]
document.all.item("docid")
document.all.item("docname")
document.all[7]
document.all.tags("div")则返回文档中所有DIV数组,本例中只有一个DIV,所以用document.all.tags("div")[0]就可以访问了
3)、但是document.all[]不符合WEB标准,那用什么来替代它呢?
WEB标准下可以通过getElementById(), getElementsByName(), and getElementsByTagName()访问DOCUMENT中的任一个标签。例如:
比如说有一个DIV的ID为docid:
<div id="docid"></div>
那么就可以用getElementById("docid")来获得这个元素。
2、setTimeout(method(),int)函数:还没怎么看懂,我理解为暂时延缓method得执行。如下两个例子,一个有循环作用,一个只执行一次,看不懂。
1)、
<script language=javascript>
temp()
function temp()
{
document.writeln("<hr>");
setTimeout("temp()",2000);
}
</script>
2)、
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
<html>
<body>
<script language=javascript>
temp()
function temp()
{
var hr=document.createElement("hr");
document.getElementsByTagName("body")[0].appendChild(hr);
setTimeout("temp()",2000);
}
</script>
</body>
</html>
3、Window.Open()
window.open(pageURL,name,parameters)
其中:
pageURL 为子窗口路径
name 为子窗口句柄
parameters 为窗口参数(各参数用逗号分隔)
例如:
<SCRIPT>
<!--
window.open ('page.html','newwindow','height=100,width=400,top=0,left=0,toolbar=no,menubar=no,scrollbars=no, resizable=no,location=no, status=no')
//写成一行
-->
</SCRIPT>
脚本运行后,page.html将在新窗体newwindow中打开,宽为100,高为400,距屏顶0象素,屏左0象素,无工具条,无菜单条,无滚动条,不可调整大小,无地址栏,无状态栏。
2009-11-24:jsp参数传递方法。
1、可以直接在页面后面传入参数,例如:
"detail1.jsp?title=canshu1&no=1;
detail1.jsp中,可以request.getParameter("title")取出第一个参数,request.getParameter("no")取出第二个参数,如果含有中文,则
new String(request.getParameter("title").getBytes("iso-8859-1"), "gb2312")即可.
2、request.setAttribute(String,Object)在Request中传递,使用session.setAttribute(String,Object)在Session中传递,还有就是你现在使用的,使用request.getParameter(String)来传递,总之方法很多。
2009-11-25:javascript学习
1、包含函数的脚本位于文档的 head 部分。这样我们就可以确保在调用函数前,脚本已经载入了。
2、单行的注释以 // 开始。
3、多行注释以 /* 开头,以 */ 结尾。
4、JavaScript 变量名称的规则:
变量对大小写敏感(y 和 Y 是两个不同的变量)
变量必须以字母或下划线开始
5、&& and (x < 10 && y > 1) 为 true
|| or (x==5 || y==5) 为 false
! not !(x==y) 为 true
6、注意:请使用双等号 (==) 来比较变量!
7、警告框:alert("文本");
确认框:confirm("文本");
提示框:prompt("文本","默认值");
8、别忘记 JavaScript 中大小写字母的重要性。"function" 这个词必须是小写的,否则 JavaScript 就会出错。另外需要注意的是,必须使用大小写完全相同的函数名来调用函数。
9、JavaScript 变量的生存期
当您在函数内声明了一个变量后,就只能在该函数中访问该变量。当退出该函数后,这个变量会被撤销。这种变量称为本地变量。您可以在不同的函数中使用名称相同的本地变量,这是因为只有声明过变量的函数能够识别其中的每个变量。
如果您在函数之外声明了一个变量,则页面上的所有函数都可以访问该变量。这些变量的生存期从声明它们之后开始,在页面关闭时结束。
10、JavaScript 有两种不同种类的循环:
for
将一段代码循环执行指定的次数
while
当指定的条件为 true 时循环执行代码
for语法:
for (变量=开始值;变量<=结束值;变量=变量+步进值)
{
需执行的代码
}
while语法:
while (变量<=结束值)
{
需执行的代码
}
11、break 语句
使用 break 语句来终止循环。
continue 语句
使用 continue 语句来终止当前的循环,然后从下一个值继续执行。
12、For...In 声明用于遍历数组或者对象的属性(对数组或者对象的属性进行循环操作)。
语法:
for (变量 in 对象)
{
在此执行代码
}
13、onload 和 onUnload
当用户进入或离开页面时就会触发 onload 和 onUnload 事件。
onload 事件常用来检测访问者的浏览器类型和版本,然后根据这些信息载入特定版本的网页。
onload 和 onUnload 事件也常被用来处理用户进入或离开页面时所建立的 cookies。例如,当某用户第一次进入页面时,你可以使用消息框来询问用户的姓名。姓名会保存在 cookie 中。当用户再次进入这个页面时,你可以使用另一个消息框来和这个用户打招呼:"Welcome John Doe!"。
14、onFocus, onBlur 和 onChange
onFocus、onBlur 和 onChange 事件通常相互配合用来验证表单。
下面是一个使用 onChange 事件的例子。用户一旦改变了域的内容,checkEmail() 函数就会被调用。
15、onSubmit
onSubmit 用于在提交表单之前验证所有的表单域。
下面是一个使用 onSubmit 事件的例子。当用户单击表单中的确认按钮时,checkForm() 函数就会被调用。假若域的值无效,此次提交就会被取消。checkForm() 函数的返回值是 true 或者 false。如果返回值为true,则提交表单,反之取消提交。
<form method="post" action="xxx.htm" onsubmit="return checkForm()">
16、onMouseOver 和 onMouseOut
onMouseOver 和 onMouseOut 用来创建“动态的”按钮。
下面是一个使用 onMouseOver 事件的例子。当 onMouseOver 事件被脚本侦测到时,就会弹出一个警告框:
<a href="http://www.w3school.com.cn"
onmouseover="alert('An onMouseOver event');return false">
<img src="w3school.gif" width="100" height="30">
</a>
17、try...catch 使用小写字母。大写字母会出错
18、注意:使用小写字母编写 throw。使用大写字母会出错!
19、你可以在 JavaScript 中使用反斜杠来向文本字符串添加特殊字符。
如下:
\' 单引号
\" 双引号
\& 和号
\\ 反斜杠
\n 换行符
\r 回车符
\t 制表符
\b 退格符
\f 换页符
20、JavaScript 指导方针
1)、JavaScript 对大小写敏感
2)、JavaScript 会忽略多余的空格。所以您可以在代码中添加适当的空格,使得代码的可读性更强。下面的两行是等效的:
name="Hege"
name = "Hege"
3)、换行
您可以在文本字符串内部使用反斜杠对代码进行折行。下面的例子是正确的:
document.write("Hello \
World!")
但是不能像这样折行:
document.write \
("Hello World!")
2009-12-03::很好的文章,要多读几次
http://info.codepub.com/2008/09/info-22578.html
分享到:
相关推荐
【Java学习日记3】 在Java学习的初期,我们首先要了解Java的基本特性,它是一种跨平台的语言,这得益于Java虚拟机(JVM)。JVM使得Java程序可以在任何支持JVM的操作系统上运行,如Windows、Linux或Mac OS。JVM有多...
此外,《Rust学习日记》还包括了对标准库的使用介绍及第三方库集成指导,为读者提供全面而实用的学习路径。每章节后附有习题练习,便于巩固所学知识并应用于项目开发中。 适用人群: 对Rust感兴趣的初学者,希望...
【Java进阶学习日记】是一份全面且深入的Java学习资料,旨在帮助已经掌握基础的开发者进一步提升技能,同时也适合正在寻找工作的Java学习者作为面试准备。这份学习笔记涵盖了广泛的Java相关主题,从底层的计算机操作...
"Python学习日记.zip"这个压缩包文件,很可能包含了某位开发者在学习Python时所记录的笔记、代码示例或项目实践,旨在帮助初学者或者有经验的程序员巩固Python的基础,探索其高级特性,以及解决实际问题。...
本文将围绕C8051F的学习日记,探讨其中的关键知识点,尤其是AD采集和中断处理。 首先,C8051F的AD采集功能是其一大亮点。在提供的代码中,可以看到AD采集用于测量交流电的电压和电流,通过精密整流后,每个周期采集...
### jBPM小白的学习日记——深入理解流程定义与部署 #### 一、jBPM简介 jBPM(Java Business Process Model)是一个开源的工作流引擎,由JBoss维护,广泛应用于业务流程管理(BPM)场景。它提供了一种简单而强大的...
Oracle DBA学习日记笔记 本资源为 Oracle DBA 学习日记笔记,共36页,简洁清晰的总结了 Oracle DBA 的重点部分,这是一个非常有价值的 Oracle DBA 入门资料。 在本资源中,我们可以看到作者Stephenzhou对 Oracle ...
【XWiki 学习日记1】 XWiki 是一个开源的、可扩展的、基于Java的wiki平台,它提供了丰富的功能,包括文档管理、协作编辑、版本控制等。在这个学习日记中,我们将深入探讨XWiki的核心特性,源码结构以及如何利用它...
**Python学习日记** 这篇日记包含了对Python编程语言的多个核心概念的详细学习记录,通过一系列的md文件,我们可以深入理解Python的基本语法、数据结构、控制流以及错误处理机制。 1. **字面量、数据类型、输入...
该项目汇集自《Rust学习日记》公众号,旨在帮助读者从零基础小白成长为Rust领域的专家。源码包含568个文件,涵盖168个Rust源文件、121个TOML配置文件、120个LOCK文件、17个PNG图片、16个DS_Store文件、11个...
Linux 210 学习日记是一系列针对S5PV210处理器的学习记录,旨在帮助读者理解并掌握这款基于ARM Cortex-A8架构的微处理器的使用。S5PV210是三星推出的一款高性能应用处理器,常用于嵌入式系统和开发板,如QT210开发板...
本人的菜鸟学习日记,学习配置geoserver和maven的经验。
这篇学习日记将为你提供一个实用性极强的Oracle学习总结,涵盖了基础使用、常用命令、数据库配置、用户管理和权限管理等多个方面。 首先,了解Oracle数据库的基本使用是学习的基础。这包括了如何连接和断开数据库,...
SpringBoot学习日记(一-六)是一系列关于Spring Boot技术的深入探讨,涵盖了从基础到进阶的应用。Spring Boot是Spring框架的一个简化版,旨在简化Java应用的初始搭建以及开发过程,它内置了Tomcat服务器并默认配置了...
【Linux学习日记(2)_准备工作】这篇日记主要涵盖了在Linux环境下对嵌入式开发板进行初始设置和程序烧录的基本步骤,以及相关的编程实践。以下是详细的解析: 首先,文章介绍了如何将裸机程序下载到SD卡。在Linux...
【标题】:“Android学习日记-2 ASM android底层” 在Android开发中,深入理解系统的底层运作是提升技术能力的重要环节。ASM是一个强大的字节码操控和分析框架,它允许动态生成类或者增强已有类的功能,而无需知道...
这个压缩包"html学习日记6_网站.rar"很可能是某位学习者在第六阶段关于构建网站的学习记录,其中可能包含了HTML代码示例、笔记或者小项目。"pre_html_04"这个文件名可能是指预HTML的第四个部分,暗示了这是一个关于...
"vue学习日记19:记事本-组件版"是一个关于如何利用Vue.js创建一个功能丰富的记事本组件的实例教程。在这个项目中,我们将深入探讨Vue组件的基本概念、组件的生命周期、状态管理和事件通信。 首先,Vue组件是Vue...