木子屋 Dnawo's BLOG

分类:Web编程

共 939 篇

oracle数据库sql优化总结

Sql优化是一项复杂的工作,以下的一些基本原则是本人看书时所记录下来的,很明确且没什么废话: 1.索引的使用 (1).当插入的数据为数据表中的记录数量的10%以上,首先需要删除该表的索引来提高数据的插入效率,当数据插入后,再建立索引。 (2).避免在索引列上使用函数或计算,在where子句中,如果索引是函数的一部分,优化器将不再使用索引而使用全表扫描。如: 低效:select * from dept where sal*12 >2500; 高效:select * from dept where sal>2500/12; (3).避免在索引列上使用not和 "!=",索引只能告诉什么存在于表中,而不能告诉什么不存在于表中,当数据库遇到not 和 "!="时,就会停止使用索引而去执行全表扫描。…

SQL优化总结

人们在使用SQL时往往会陷入一个误区,即太关注于所得的结果是否正确,而忽略了不同的实现方法之间可能存在的性能差异,这种性能差异在大型的或是复杂的数据库环境中(如联机事务处理OLTP或决策支持系统DSS)中表现得尤为明显。笔者在工作实践中发现,不良的SQL往往来自于不恰当的索引设计、不充份的连接条件和不可优化的where子句。在对它们进行适当的优化后,其运行速度有了明显地提高!下面我将从这三个方面分别进行总结: 为了更直观地说明问题,所有实例中的SQL运行时间均经过测试,不超过1秒的均表示为('19991201' and date < '19991214'and amount >2000 (25秒) select date,sum(amount) from record group by date (55秒)…

ASP.NET服务器控件Label和Literal的区别

1.Label运行后会被转换成标签,Literal运行后不会转成其他html标签; 2.Label支持html样式,Literal可以设置不支持html样式; 例如: 结果: Hello World! Hello World! Hello World!

MSSQL标量函数、多语句表值函数和内嵌表值函数

在SQL Server 2000中,用户可以自己定义函数来补充和扩展系统支持的内置函数,用户定义函数分为标量值函数和表值函数。如果 RETURNS 子句指定一种标量数据类型,则函数为标量值函数;如果 RETURNS 子句指定 TABLE,则函数为表值函数。根据函数主体的定义方式,表值函数又可分为内嵌表值函数和多语句表值函数,如果 RETURNS 子句指定的 TABLE 类型带有列及其数据类型,则该函数是多语句表值函数;如果 RETURNS 子句指定的 TABLE 不附带列的列表,则该函数为内嵌表值函数,内嵌表值函数是使用单个 Select 语句定义的表值函数,该语句组成了函数的主体。 1.标量函数 示例:…

函数中最后一条语句必须是返回语句

在MSSQL中尝试写了个标量函数: 保存时出错,提示:函数中最后一条语句必须是返回语句!将上边函数稍做修改: 这回可正常保存了,也就是说:MSSQL的标量函数不能像C#的函数那样可以任意地方用return返回值,他的返回语句必须在最后一行进行! 再来看看标量函数的语法: 语法中已经说得很明白了,只是没去写也没发觉,呵呵。 顺便说下标量函数的调用方法:

使用TrimEnd格式化字符串

在数据库中有一money类型的字段,其值形如: 2.0000 1.5000 1.0000 3.0000 显示在页面上的时候要求把右边的零去掉,显示如下: 2 1.5 1 3 用.NET的函数TrimEnd可以很方便的解决这个问题:

C#向客户端注册脚本的几种方法

在C#中可以使用RegisterClientScriptBlock、RegisterStartupScript和RegisterClientScriptInclude来向客户端注册脚本,它们的区别是: RegisterClientScriptBlock:在页面内容前注册脚本; RegisterStartupScript:在页面内容后注册脚本; RegisterClientScriptInclude:在页面内容前引用外部脚本; 例如下边脚本: 显示结果为: 说明 1.RegisterClientScriptBlock和RegisterStartupScript推荐使用RegisterStartupScript,特别是当注册的脚本要调用页面的元素或函数时,如果使用RegisterClientScriptBlock可能会发生元素/函数还没加载完毕导致出错。…

说说PHP的字符串查找函数strpos

strpos函数用于在一个字符串中查找另一个字符串出现的位置,当存在时,返回一个整型的索引值,当不存在时返回false,但我们不能使用下边的例子来判断一个字符串是否存在于另一个字符串中: 原因是strpos可能返回布尔值false,但也可能返回一个与false等值的非布尔值,例如0或者"",所以上边例子应改为: 或者我们干脆可以自定义一个函数,类似于js和c#的indexOf,当存在时返回索引值,不存在时返回-1:

使用Environment类获取服务器信息

工作目录: Environment.CurrentDirectory 系统目录: Environment.SystemDirectory 当前目录: Server.MapPath(".") 计算机名称: Environment.MachineName 系统版本号: Environment.OSVersion.ToString() 处理器个数: Environment.ProcessorCount 系统启动时间(h): Environment.TickCount/3600000 网络域名: Environment.UserDomainName 当前用户: Environment.UserName…

在显式转换中使用checked进行溢出检查

当不能使用隐式转换安全的进行转换时(例如将short类型的值转换为byte类型),就必须使用显式转换,例如: 我们知道,short的取值范围比byte大,当将大于255的short类型的值显式转换为byte会出现什么情况呢? 运行结果没有出错,var1的值为231,为什么会是231呢?我们将上边的值转换为二进制看下: 1111100111 : 256 0011100111 : 231 0011111111 : 255 你会发现大于11111111部分全被丢弃了!这样的转换让我们变得没有安全感,这样的转换也变得毫无意义,幸好C#提供了checked关键字让我们在转换的过程中检查是有溢出,一旦溢出程序并会报错System.OverflowException:…