经验首页 前端设计 程序设计 Java相关 移动开发 数据库/运维 软件/图像 大数据/云计算 其他经验
当前位置:技术经验 » 数据库/运维 » MS SQL Server » 查看文章
SQL 乐色干货笔记
来源:cnblogs  作者:亚俊  时间:2019/10/14 9:54:42  对本文有异议

因为公司基本都是用存储过程所以本来写的干货基本都是存储过程的。

 

  1. SELECT TOP 1 Code,Invitation,Num,Typ FROM SignLog WITH(NOLOCK)
  2. WHERE UserId=@userId AND TaskId=2 AND AddTime>=@stime AND AddTime<@etime

用以上语句来说一下例子:

查询 一定要指定字段就算你要查全部字段也不要用*号来代替   ,以及  能用TOP尽量TOP

避免没必要的锁 必须加   WITH(NOLOCK) 避免产生没有必要的锁出来。

 

 

 因为字段多,数据多一个索引没有走。

 

 

 

 

 

 加了字段后就会快很多比你查全部的快很多,精准的查询。

 ------------------------------------------------------------------------------------------------------------

  1. UserId=@userId AND TaskId=2 AND AddTime>=@stime AND AddTime<@etime
  2.  
  3. 如果UserIdAddTime是索引,TaskId不是,那像上面这样只会走一个索引。

 

  1. UserId=@userId AND AddTime>=@stime AND AddTime<@etime AND TaskId=2
  2. 如果改成上面这样就会走两个索引。
  1.  
  1. UPDATE SignLog SET NUM+=1
  2. WHERE UserId=@userId AND AddTime>=@stime AND AddTime<@etime AND TaskId=2
  1. 像上面这样的更改语句这样写是没有什么的,如果是在存储过程写的话像下面一样写会比你上面写法快。
  1. DECLARE @ID INT=0
  2. SELECT TOP 1 @ID=ID FROM SignLog WITH(NOLOCK) WHERE UserId=@userId AND AddTime>=@stime AND AddTime<@etime AND TaskId=2
  3. UPDATE SignLog SET NUM+=1 WHERE ID=@ID

像这样写正常会快点,而且也不会产生没有必要的锁出来,而且该走的索引都走了。

能走索引就走索引,索引肯定比你正常的快丶丶。

 

-------------------------------------------------------------------------------------------------------------

 

  1. UPDATE dbo.Activity_RoomActivity SET ActivityState=2 WHERE ActivityState=0 AND StartTime<DATEADD(hh,-1,GETDATE())
  1. 这样更新一个索引没有走上,而且还一条一条改。

    可以改成以下差不多的。

  1.      SELECT Id INTO #temp
  2. FROM dbo.Activity_RoomActivity WITH(NOLOCK)
  3. WHERE ActivityState=0 AND StartTime<DATEADD(hh,-1,GETDATE())
  4. UPDATE t1 SET t1.ActivityState=2 FROM dbo.Activity_RoomActivity t1,#temp t2
  5. WHERE t1.Id=t2.Id

 这样修改的时候就会走索引去修改。









原文链接:http://www.cnblogs.com/ya-jun/p/11662727.html

 友情链接:直通硅谷  点职佳  北美留学生论坛

本站QQ群:前端 618073944 | Java 606181507 | Python 626812652 | C/C++ 612253063 | 微信 634508462 | 苹果 692586424 | C#/.net 182808419 | PHP 305140648 | 运维 608723728

W3xue 的所有内容仅供测试,对任何法律问题及风险不承担任何责任。通过使用本站内容随之而来的风险与本站无关。
关于我们  |  意见建议  |  捐助我们  |  报错有奖  |  广告合作、友情链接(目前9元/月)请联系QQ:27243702 沸活量
皖ICP备17017327号-2 皖公网安备34020702000426号