随笔分类 -  SQL

摘要:如何优化大数据量表的查询,尤其是两个表关联查询。这里提供一种解决思路。采用临时表或临时表变量,把两个表或者其中一个表筛选出一部分数据放到临时表中,然后再进行连接查询。临时表存储于内存中,只用于做查询操作,避免了其他用户的增、删操作锁定表的性能消耗。在执行表查询操作的时候,要加s锁,被加了s锁的表,其他用户只能进行查询操作,而不能进行修改删除操作。也就是说:被加了s锁的表,还能被s锁,但不能加x锁。创建临时表就能及时释放s锁,以供后来用户使用。一定程度防止耗时的查询阻塞其他用户。基本的封锁类型有两种排它锁(X锁)和共享锁(S锁).所谓X锁,是事务T对数据A加上X锁时,只允许事务T读取和修改数据A 阅读全文
posted @ 2013-01-19 10:24 life is a gift 阅读(454) 评论(0) 推荐(0)
摘要:做好备忘,sql 2005推出的row_number函数,使用分页查询更简单了。原来mssql中分页查询都是用top来做,有些繁琐。自有了row_number感觉简单了许多。但还是不如mysql中的limit,一条就ok。row_number函数分页也还是需要子查询。先用row_number把原记录按id排序查询,重新制定编号。然后再按新的编号查询指定范围。思路是不是很清晰了。select * from (select row_number() over(order by id asc) as numid,* from branch ) as twhere t.numid between 5 阅读全文
posted @ 2013-01-17 09:29 life is a gift 阅读(457) 评论(0) 推荐(0)
摘要:1.在数据库中保存的存储过程都是编译过的,执行速度快。2.允许模块化编程,类型方法的复用。3.提高了性能的安全性,防止sql注入。4.调用时减少网络流通量,只传输存储过程名称。系统存储过程一般以sp_或xp_开头,用户存储过程一般以usp_开头。调用存储过程用关键字exec1.创建一个名为usp_helloworld存储过程create proc usp_helloworldasbegin print 'hello world!!!';endexec usp_helloworld2.创建一个带参数存储过程,并输出两个的和。--带参数存储过程create proc usp_add 阅读全文
posted @ 2013-01-14 15:35 life is a gift 阅读(252) 评论(0) 推荐(0)
摘要:经常会用到的往数据库插入一条记录并获取该条记录的ID。千万不要去,先insert into一条记录,然后查询表格的最后一条记录是多少,这样会有问题的,如果同时有多个连接插入数据的话,你获取的可能不是你刚才的那条记录。这个是比较小儿科做法,一般人估计不会这么干。在sql2005以前很多人都是采用SELECT@@Identity来获取上一条记录的自动编号。在insert into之后紧接着执行@@Identity。C# ado.net中调用时,把两条语句作为一条sql,同时提交。用ExecuteScalar读取。insert into employees values('张三1', 阅读全文
posted @ 2013-01-14 14:04 life is a gift 阅读(833) 评论(0) 推荐(0)
摘要:虽然现在什么问题都能问百度、谷歌。但是有些基本的知识还是需要上手就有的。现在很多工具都是可视化操作,很多命令就淡忘了。重新复习下,面试题中出现的几率很高的。下面的操作是在microsoft sql server 2005中测试无误,其他版本请大家自行测试。1>简单创建数据库,数据表创建数据库mydb。注意用户名称要用中括号包裹,以区分系统关键词。我很多时候就不太习惯用。不过这样在程序中很容易出错而找不到问题在哪。create database mydb创建一个员工表。注意自增长的关键词identity;varchar和nvarchar的区别,两者都能存储中文字符,但varchar在英文操 阅读全文
posted @ 2013-01-14 14:03 life is a gift 阅读(207) 评论(0) 推荐(0)
摘要:事务的用途这里就不赘述了。在一些大型项目安全性强项目用途还是比较广泛的。在执行银行转账操作的时候,A用户向B用户转账1000元。--begin transaction --打开一个事务,简写可以用begin tran--@@error范围错误码,如果没错误就返回0begin tran declare @sum int update employees set balance=balance-1000 where id=1 set @sum =@sum+@@error update employees set balance=balance+1000 where id=2... 阅读全文
posted @ 2013-01-14 14:03 life is a gift 阅读(167) 评论(0) 推荐(0)