数据库技术
Damon_King
别人笑我太疯癫,我笑别人开裤裆
展开
-
对IN & EXISTS NOT IN & NOT EXISTS的优化
在平时工作中,IN & EXISTS NOT IN & NOT EXISTS是使用频率比较高的SQL语句,所以对它们的优化工作是很有必要的测试环境:Oracle 9.2.0.1 for Windows20001、IN 和 EXISTS IN和EXISTS的处理流程是不一样的: IN的执行流程 select * from T1 where x in ( select y转载 2007-10-22 17:04:00 · 1659 阅读 · 1 评论 -
Modifying Table Partitions
Modifying Table Partitions Oracle Tips by Burleson You can modify a table or table partition in any of the wa转载 2008-04-08 15:58:00 · 1839 阅读 · 1 评论 -
SQL语句在什么情况下使用全表扫描?
问:SQL语句在什么情况下使用全表扫描? 答:1:对返回的行无任何限定条件,即没有where 字句 2:对数据表与任何索引主列相对应的行限定条件,例如:在City-State-Zip列创建了三列复合索引,那么仅对State有列限定条件不能使用这个索引,因为State不是索引的主列。 3:对索引的主列有限定条件,但是条件在表达式里使用,例如:在City上有索引,但是若使用表达式,如:转载 2008-04-14 14:32:00 · 1351 阅读 · 0 评论 -
写有效率的SQL查询(III)
先说说这些误区。所谓“误区”,有一些是新手很容易犯的错误或者很容易忽略的问题,另外一些,则是像“耗子吃了盐会变成蝙蝠”一样,让我们从小就认为是正确的事情。如下:1、 表上不管用得着用不着,都加个聚集索引。我们知道,表以两种方式组织物理存储:有聚集索引的“聚集表”;没有聚集索引的“堆”。在聚集表中,数据行按照聚集索引的顺序存储(这也是为啥一张表最多只能有一个聚集索引的原因);堆中,数据行转载 2008-04-14 14:59:00 · 1069 阅读 · 0 评论 -
写有效率的SQL查询(I)
大型系统的生产环境,一般情况下,我们评价一条查询是否有效率,更多的是关注逻辑IO(至于为什么,回头补一篇)。我们常说,“要建彪悍的索引”、“要写高效的SQL”,其实最终目的就是在相同结果集情况下,尽可能减少逻辑IO。1.1 where条件的列上都得有统计信息。没统计信息SQLServer就无法估算不同查询计划开销优劣,而只能采用最稳妥的Scan(不管是table scan还是c转载 2008-04-14 15:01:00 · 1534 阅读 · 0 评论 -
写有效率的SQL查询(II)
上回我们说到评估一条语句执行效率主要看逻辑IO(啥是逻辑IO,啥是物理IO见联机文档),这次我们继续。我们先说说,返回多行结果时,为什么SQLServer有时会选择index seek,有时会选择index scan。以nonclustered index为例说明。像所有的索引B树一样,非聚集索引树也包括完全由索引数据组成的根节点和中间级节点;但是和聚集索引树不同的是,聚集索引树叶节点转载 2008-04-14 15:03:00 · 1408 阅读 · 0 评论 -
写有效率的SQL查询(V)
先站在应用程序的角度说说它们的不同。1、 直接拼SQL就像大家了解的那样,直接拼SQL带来了SQL注入攻击,带来了拼时些许的性能损失,但是拼不用添加SqlParameter,会少写很多代码——很多人喜欢直接拼,也许就因为这点。这种做法会把你拼好的SQL原样直接发送到DB服务器去执行。(注意类似”exec yourproc ‘param1’, 12”的语句不在此范畴,这是调用存储过程的一种转载 2008-04-14 15:04:00 · 1499 阅读 · 0 评论 -
写有效率的SQL查询(IV)
本文主要介绍写SQL的另外两个误区:1、 存储过程中使用局部变量而不使用参数变量(就是存储过程输入参数)做where条件2、 查询条件中类型不匹配这两种错误都是非常非常容易犯且非常发指的错误,特别是2,太多次见过了。 一、关于存储过程使用局部变量,我们举例说明。有这么一张表存储过程:create proc test( @id int)assele转载 2008-04-14 15:37:00 · 1326 阅读 · 0 评论 -
写有效率的SQL查询(VI)
我们先看NestedLoop和MergeJoin的算法(以下为引用,见RicCC的《通往性能优化的天堂-地狱 JOIN方法说明》):==================================NestedLoop: foreach rowA in tableA where tableA.col2=? { search rowsB from tableB where t转载 2008-04-14 15:39:00 · 1688 阅读 · 0 评论 -
Sql server 性能监视器各参数含义
Sql server 性能监视器:要标识CPU内核性能,Windows 2000系统提供了一个系统对象计数器:% Total Processor Time,该计数器评估CPU的平均使用情况这个计数器用来监视CPU使用情况。如果在一段连续时间(10分钟左右),数值超出80%,就说明系统产生了CPU瓶颈,你需要采取一些必要的措施,例如降低SQL Server的工作负载,更换更快的CPU或者更多的C转载 2008-04-24 15:06:00 · 3713 阅读 · 3 评论 -
SQL2005分区表功能的知识要点(一):RANGE LEFT 与 RANGE RIGHT
(一).为范围分区创建分区函数 范围分区必须使用边界条件进行定义。而且,即使通过 CHECK 约束对表进行了限制,也不能消除该范围任一边界的值。为了允许定期将数据移入该表,需要创建最后一个空分区。 在范围分区中,首先定义边界点:如果存在五个分区,则定义四个边界点值,并指定每个值是第一个分区的上边界 (LEFT) 还是第二个分区的下边界 (RIGHT)。根据 LEFT 或 RIGHT 指定,原创 2008-04-07 17:35:00 · 2664 阅读 · 0 评论 -
SQL2005分区表功能的知识要点(二):基本概念和术语
定义和术语要在 SQL Server 2005 中实现分区,必须了解一些新的概念、术语和语法。要理解这些新概念,首先我们看一下与创建和放置操作有关的表结构。在以前的版本中,表通常是一个物理和逻辑概念,但使用 SQL Server 2005 分区表和索引,您在存储表的方式和位置方面就有了多种选择。在 SQL Server 2005 中,可以使用以前版本中的相同语法创建表和索引,作为一个表结构放置转载 2008-04-08 14:25:00 · 1996 阅读 · 1 评论 -
索引的优点和缺点,如何建立索引,索引的特征
为什么要创建索引呢?这是因为,创建索引可以大大提高系统的性能。第一,通过创建唯一性索引,可以保证数据库表中每一行数据的唯一性。第二,可以大大加快数据的检索速度,这也是创建索引的最主要的原因。第三,可以加速表和表之间的连接,特别是在实现数据的参考完整性方面特别有意义。第四,在使用分组和排序子句进行数据检索时,同样可以显著减少查询中分组和排序的时间。第五,通过使用索引,可以在查询的过程转载 2007-10-24 15:08:00 · 2083 阅读 · 0 评论 -
SQL语句的各种写法(不断更新中)
删除索引: 标准写法:DROP INDEX table_name>.index_name> 其它写法:DROP INDEX ON原创 2007-10-23 18:35:00 · 1105 阅读 · 0 评论 -
使用SQL语句删除带用默认值的列
在企业管理器中删除字段是方便了些,但对于数据量大的表,往往要等上好久,很考验人的耐性。使用SQL来操作相对来说比较快滴,但往往有好多问题,比如删除某个字段,使用如下语句:alter table table_name drop column column_name 在字段没有默认值的时候可以删除,一旦字段有默认值,就会出现:对象DF_table_name_column_name 依原创 2007-10-26 17:21:00 · 2429 阅读 · 0 评论 -
SQL随机查询
1. Oracle,随机查询20条select * from ( select * from 表名 order by dbms_random.value ) where rownum 2.MS SQL Server,随机查询20条select top 20 * from 表名order by newid() 3.My SQL:,随机查询20条sele转载 2007-10-16 18:45:00 · 1171 阅读 · 0 评论 -
透过LINQSQO看LINQ内部机理
在未来几年,对框架开发人员而言写LINQ Provider将是一项必须的技能。在未来,所有暴露数据存储的.NET类库都需要有LINQ的支持,随着最近.NET 3.5的发布,这一事项被提上日程。为了让开发人员,尤其是写Provider的人群更简单地理解LINQ是如何工作的,Bart De Smet创建了一个称为LINQSQO(LINQ Standard Query Operator, LINQ转载 2007-12-06 18:39:00 · 1480 阅读 · 0 评论 -
奇怪的数据插入异常:传入的表格格式数据流(TDS)远程过程调用(RPC)协议流不正确。
前天完成了手头的工作后,经理交给我一个bug让我看下,我接过后看了下Bug信息,是从未见过的异常,但根据异常信息提示又很容易判断出异常原因。异常信息:传入的表格格式数据流(TDS)远程过程调用(RPC)协议流不正确。参数 7 ("@ExchangeRate"): 提供的值不是数据类型 float 的有效实例。请检查源数据中的无效值。例如,小数位数大于精度的数值类型的数据即为无效值。 从信息原创 2007-12-07 10:32:00 · 7926 阅读 · 5 评论 -
创建索引时指定索引选项的好处
在创建索引时,可以指定一些选项,通过使用这些选项,可以优化索引的性能。这些选项包括FILLFACTOR选项、PAD_INDEX选项和SORTED_DATA_REORG选项。使用FILLFACTOR选项,可以优化插入语句和修改语句的性能。当某个索引页变满时,SQL SERVER必须花费时间分解该页,以便为新的记录行腾出空间。使用FILLFACTOR选项,就是在叶级索引页上分配一定百分比的自由空间,以原创 2007-12-10 18:14:00 · 1655 阅读 · 0 评论 -
@@IDENTITY 是否总能保证插入语句执行后的ID是正确的?
这两天CSDNBlog问题不断啊!今天venjiang老大忙里偷闲去群里骂我们, 搞了个难题考我们。出题如下:@@IDENTITY 是否总能保证插入语句执行后的ID是正确的?(这描述的不清晰哦,云里雾里的揣摩老大的意思ing....)我想了想(因为我们一直使用inser into table ,select @@IDENTITY 这样的语句返回插入的数据ID,并且从没碰到过返回的ID与数据原创 2007-12-29 16:21:00 · 1536 阅读 · 0 评论 -
跨服务器导入数据SQL语句及其问题解决方案
跨服务器导入数据SQL语句:--自定义表名,在导入前创建表SELECT * INTO TbName FROM OPENROWSET(SQLOLEDB,192.168.0.7;sa;damon king,DBName.dbo.TbName)--跨服务器查询示例SELECT * FROM OPENROWSET(SQLOLEDB,192.168.0.7;sa;damo原创 2008-04-08 09:43:00 · 1431 阅读 · 0 评论 -
MS SQL查询时自动给数据排名:RANK(),DENSE_RANK()
相信每人在开发应用过程中都遇到过这样的需求:针对所查询数据的某列进行排名。一般情况下我们有2种选择: 1.将数据查询出来,在显示数据的时候给每条数据增加排名数字; 2.使用SQL函数在查询时自动给数据排名。 更多时候,我们推荐,在性能允许的情况下,让数据库承担它力所能及的逻辑处理,而让程序更专注于业务。这里我就把如何为使用SQL给数据排名。相信大家对ROW_NUMBER(原创 2008-10-16 20:31:00 · 3798 阅读 · 0 评论