随笔分类 - SQL SERVER
摘要:合并列值表结构,数据如下:view plainidvalue-----------1aa1bb2aaa2bbb2ccc需要得到结果:id values------ -----------1 aa,bb2 aaa,bbb,ccc即:group by id, 求 value 的和(字符串相加)1. 旧的解决方法(在sql server 2000中只能用函数解决。)--1. 创建处理函数create table tb(id int, value varchar(10))insert into tb values(1, 'aa')insert into tb values(1,
阅读全文
摘要:随着数据库的发展,如今的数据库可以储存大量的数据,内存也是越来越大,但是无论您的内存多大,内存总是显得不够用,这时就要涉及到分页,下文中将为大家带来详细的数据库分页操作。AD:1.Oracle:select*from(selectrow_.*,rownumrownum_from(query_SQL)row_whererownum=<max)whererownum_>=min2.SQL Server:selecttop@pagesize*fromtablenamewhereidnotin(selecttop@pagesize*(@page-1)idfromtablenameorder
阅读全文
摘要:row_number() OVER (PARTITION BY COL1 ORDER BY COL2) 表示根据COL1分组,在分组内部根据 COL2排序,而此函数计算的值就表示每组内部排序后的顺序编号(组内连续的唯一的). 与rownum的区别在于:使用rownum进行排序的时候是先对结果集加入伪列rownum然后再进行排序,而此函数在包含排序从句后是先排序再计算行号码. row_number()和rownum差不多,功能更强一点(可以在各个分组内从1开时排序). rank()是跳跃排序,有两个第二名时接下来就是第四名(同样是在各个分组内). dense_rank()l是连续排序,有两个第二
阅读全文
摘要:如何在SQL中使用循环结构 解答 FOR,LOOP,WHILE,REPEAT是UDB/400的一种内部循环控制,用于遍历表中符合条件的每一行记录。例如:目的:更新employee库,把所有北京籍员工的工资提高10%例一:使用FOR循环--------------------------------------------CREATE PROCEDURE QGPL/TEST_FORLANGUAGE SQLBEGINFOR each_record AS---cur01 CURSOR FOR------SELECT * FROM code,salary,city from employee wher
阅读全文
摘要:SQL Server 2008将包含用于合并两个行集(rowset)数据的新句法。根据一个源数据表对另一个数据表进行确定性的插入、更新和删除这样复杂的操作,运用新的MERGE语句,开发者用一条命令就可以完成…… SQL Server 2008将包含用于合并两个行集(rowset)数据的新句法。根据一个源数据表对另一个数据表进行确定性的插入、更新和删除这样复杂的操作,运用新的MERGE语句,开发者用一条命令就可以完成。 对两个表进行信息同步时,有三步操作要进行。首先要处理任何需要插入目标数据表的新行。其次是处理需要更新的已存在的行。最后要删除不再使用的旧行。这个过程中需要维护大量重复的逻辑,并.
阅读全文
摘要:1. 案例起因 公司门店应用程序每天都要出一份报表,用来统计所有商品当天的期初库存数量、入库数量、出库数量 及当天的期末库存数量。运行半年以后,这份报表运行越来越慢,到现在,每次运行该报表显示当天数据时需要近20秒的时间。于是开发人员找到我,希望我看看,是不是可以使该报表运行的时间更短。 该报表就是一段SQL语句,主要由三部分组成,第一部分是计算每个商品的期初数量,第二部分是计算每个商品的当天发生(包括入库和出库的)数量,第三部分是计算每个商品的期末数量,也就是当天的余额。每个部分使用UNION ALL连接起来。 我看到该报表,第一个感觉就是这段SQL里的每个部分都要对表进行扫描,明显成本过高
阅读全文
摘要:所有Select加 With (NoLock)解决阻塞死锁,在查询语句中使用 NOLOCK 和 READPAST 处理一个数据库死锁的异常时候,其中一个建议就是使用 NOLOCK 或者 READPAST 。有关 NOLOCK 和 READPAST的一些技术知识点: 对于非银行等严格要求事务的行业,搜索记录中出现或者不出现某条记录,都是在可容忍范围内,所以碰到死锁,应该首先考虑,我们业务逻辑是否能容忍出现或者不出现某些记录,而不是寻求对双方都加锁条件下如何解锁的问题。 NOLOCK 和 READPAST 都是处理查询、插入、删除等操作时候,如何应对锁住的数据记录。但是这时候一定要注意NOLOCK
阅读全文
摘要:Tips for Using Performance Monitor CPU CountersBy : Brad McGeheeAug 21, 2005原文: http://www.sql-server-performance.com/tips/performance_monitor_cpu_counter_p1.aspx欢迎转载。转载请保留原作者姓名以及原文地址,并请注明译文出处:http://blog.csdn.net/xiao_hn当使用CPU计数器测量CPU活动时,记住下面是SQL Server中耗用CPU资源最多的进程:上下文切换:当SQL Server在多个CPU之间切换线程时就.
阅读全文
摘要:我的数据库很容易死锁,我后来发现是聚集索引引起的,我的索引填充因子是90,后来我把聚集索引去掉,问题就解决了,但是我不明白聚集索引为什么会引起死锁??你的填充因子设置得不对 聚集索引代表了表中记录的存储顺序,所以每次数据的变化,都可能导致表中的数据按照聚集索引重新调整顺序 而填充因子设置为90,这是偏向于减少索引空间占用的做法,这样的做法导致为了减少索引的空间占用,使数据页的空闲空间很小 在向一个已满的索引页添加某个新行时,SQL Server 把大约一半的行移到新页中以便为新行腾出空间。这种重组称为页拆分。页拆分会降低性能并使表中的数据存储产生碎片 因为你这样的填充因子设置,导致数据页空闲空
阅读全文
摘要:在应用系统中,尤其在联机事务处理系统中,对数据查询及处理速度已成为衡量应用系统成败的标准。而采用索引来加快数据处理速度也成为广大数据库用户所接受的优化方法。 在良好的数据库设计基础上,能有效地使用索引是SQL Server取得高性能的基础,SQL Server采用基于代价的优化模型,它对每一个提交的有关表的查询,决定是否使用索引或用哪一个索引。因为查询执行的大部分开销是磁盘I/O,使用索引提高性能的一个主要目标是避免全表扫描,因为全表扫描需要从磁盘上读表的每一个数据页,如果有索引指向数据值,则查询只需读几次磁盘就可以了。所以如果建立了合理的索引,优化器就能利用索引加速数据的查询过程。但是,索引
阅读全文
摘要:TRUNCATE TABLE 和不带 WHERE 的 DELETE 功能是一样的,都是删除表中的所有数据,不过 TRUNCATE TABLE 速度更快,占用的日志更少,这是因为 TRUNCATE TABLE 直接释放数据页并且在事务日志中也只记录数据页的释放,而 DELETE 是一行一行地删除,在事务日志中要记录每一条记录的删除。那么可不可以用 TRUNCATE TABLE 代替不带 WHERE 的 DELETE 呢?在以下情况是不行的:1、要保留标识的情况下不能用 TRUNCATE TABLE,因为 TRUNCATE TABLE 会重置标识。2、需要使用触发器的情况下不能使用 TRUNCAT
阅读全文
摘要:方法1:使用SCOPE_IDENTITY取得刚刚插入的最大流水号 /*建立traddeinfo表各相关索引,注意Trade_id字段必段是identity型*/create table Tradeinfo(Trade_id int identity(1,1),Tdtime datetime Tdname varchar(20))create index idx_trade_id on tradeinfo(trade_id)/*使用scope_identity()中断函数,取得当前脚本范围内最后insert进去的identity值*/declare @mytradeid int set @myt
阅读全文
摘要:物化视图,所谓视图实际上是不存储物理信息的(同表相区别,表存储实际的数据和表的索引信息等。),视图仅仅存储 一个select语句而已。而物化视图就要视图也存储实际的数据,这种实际数据,就是索引。oracle 8imssqlserver2000中引入的。比如oracle的函数索引和sqlserver2000的索引视图都是物化视图。原因是这种视图能够显著提高性能,举个例子 一个表: create table mytable (id int not null,name varchar(20) not null) create index idx_mytable on mytable.name 当我.
阅读全文
摘要:又一篇笔记,以备后用!!需求:有表tb,表有两个字段,分别为:id,value。表中存有数据如下:idvalue 1 a 1 a1 1 a2 2 b 2 b1 3 c1 3 c2 需要通过查询实现:1 a,a1,a2 2b,b1 3c1,c2实现方法: 1、sql2000 使用合并函数: create function f_tb(@id int)returns varchar(8000)asbegin declare @str varchar(8000) set @str = '' select @str = @str + ',' + cast(value as
阅读全文
摘要:1.1前言目前在软件圈内有这么一个现象,就是:DBA不太懂写PL/SQL,而开发人员写的又是五花八门,而且效率不高。如此以来,造成诸多弊端:1.可读性差。读别人写的一个程序花费的时间,比自己写一个程序的花费时间还要长;非但别人看不懂,时间久了连自己也看不懂了。2.可维护性差。程序越写越长,越改越烂,像懒婆娘的裹脚布,又臭又长。3.可移植性差。今天用oracle写一套,明天换成SQL Server的时候再写一套,众多的数据库开发人员在程序的苦海中重复着低级劳动……4.效率和性能差。一个存储过程或SQL执行效率简直可以让你感觉到对时间的绝望,你很快就理解什么是相对论了。1.2编程规范概述 事实上为
阅读全文
摘要:下面再介绍一下数据库锁表及阻塞的原因和处理办法;数据库和操作系统一样,是一个多用户使用的共享资源。当多个用户并发地存取数据时,在数据库中就会产生多个事务同时存取同一数据的情况。若对并发操作不加控制就可能会读取和存储不正确的数据,破坏数据库的一致性。加锁是实现数据库并发控制的一个非常重要的技术。在实际应用中经常会遇到的与锁相关的异常情况,当两个事务需要一组有冲突的锁,而不能将事务继续下去的话,就会出现死锁,严重影响应用的正常执行。在数据库中有两种基本的锁类型:排它锁(Exclusive Locks,即X锁)和共享锁(Share Locks,即S锁)。当数据对象被加上排它锁时,其他的事务不能对它.
阅读全文
摘要:写有效率的SQL查询(I)大型系统的生产环境,一般情况下,我们评价一条查询是否有效率,更多的是关注逻辑IO(至于为什么,回头补一篇)。我们常说,“要建彪悍的索引”、“要写高效的SQL”,其实最终目的就是在相同结果集情况下,尽可能减少逻辑IO。1.1where条件的列上都得有统计信息。没统计信息SQLServer就无法估算不同查询计划开销优劣,而只能采用最稳妥的Scan(不管是table scan还是clustered index scan)。一般情况下我们不会犯这种错误——where条件里不使用非索引列是个常识。索引上的统计信息是无法删除的。1.2尽量不使用不等于(!=)或者NOT逻辑运算符。
阅读全文
摘要:一、操作符优化1、IN 操作符 用IN写出来的SQL的优点是比较容易写及清晰易懂,这比较适合现代软件开发的风格。但是用IN的SQL性能总是比较低的,从Oracle执行的步骤来分析用IN的SQL与不用IN的SQL有以下区别:ORACLE试图将其转换成多个表的连接,如果转换不成功则先执行IN里面的子查询,再查询外层的表记录,如果转换成功则直接采用多个表的连接方式查询。由此可见用IN的SQL至少多了一个转换的过程。一般的SQL都可以转换成功,但对于含有分组统计等方面的SQL就不能转换了。推荐方案:在业务密集的SQL当中尽量不采用IN操作符,用EXISTS 方案代替。2、NOT IN操作符 此操作是强
阅读全文
摘要:今天遇到这样一个细节问题,有个同事为了提高SQL执行效率使用sysindexes.rows来快速的计算表的行数结果发现取出来的行数根本就不是实际表中的行数就好比这样为了获得表中的记录数,一般都使用下面的SQL语句: SELECT COUNT(*) FROM dbo.orders但这条语句会执行全表扫描才能获得行数。 下面的SQL语句不会执行全表扫描一样可以获得行数:SELECT rows FROM sysindexes WHERE id = OBJECT_ID('表名') AND indid < 2网上很多优化文章都推荐这种做法,无可厚非,这种计算 sysindexes
阅读全文
摘要:通过总结,我发现自己以前很多很模糊的概念都清晰了很多。不论是缓存的数据信息,还是物理保存的信息,他们的基本单位都是数据页。所以理解数据页是最最基础的知识点,本篇博客就介绍跟索引有关的数据页的一些基础知识。数据页的基础知识SQL Server 中数据存储的基本单位是页(Page)。数据库中的数据文件(.mdf 或 .ndf)分配的磁盘空间可以从逻辑上划分成页(从 0 到 n 连续编号)。磁盘 I/O 操作在页级执行。也就是说,SQL Server 每次读取或写入数据的最少数据单位是数据页。注意:日志文件不是用这种方式存储的,而是一系列日志记录。数据库被分成逻辑页面(每个页面8KB),并且在每个文
阅读全文

浙公网安备 33010602011771号