zoukankan      html  css  js  c++  java
  • 一些微小提高sql性能的方法

    set noccount on
    忽略计数(隐藏1行受影响)

    with(nolock)
    忽略事务锁(跨域的时候应用nolock)

    避免在WHERE子句中使用in,not in,or 或者having。
    可以使用 exist 和not exist代替 in和not in。

    不要以字符格式声明数字,要以数字格式声明字符值;避免全表扫描
    SELECT emp.ename, emp.job FROM emp WHERE emp.empno = 7369;
    不要使用:SELECT emp.ename, emp.job FROM emp WHERE emp.empno = ‘7369’

    对Select语句的法则,做到业务需要那些字段写哪些字段,不要用*.也是避免全表扫描
    使用SELECT empno,ename,category FROM emp WHERE empno = '7369‘
    而不要使用SELECT * FROM emp WHERE empno = '7369'

    慎用LIKE '%parm1%',这样会造成全表扫描,应使用 LIKE 'parm1%' 这样做就是索引扫描了

    使用union实现or操作
    select id,name,age from table where name='张三' union all select id,name,age from table where age>=18
    不要使用select id,name,age from table where name='张三' or age>=18

    7、避免使用count(*)获得表的记录数
    (1)为了获得表中的记录数,我们通常使用下面的SQL语句:
    SELECTCOUNT(*) FROM dbo.orders
    这条语句会执行全表扫描才能获得行数。
    (2)但下面的SQL语句不会执行全表扫描一样可以获得行数:
    SELECT rows FROM sysindexes WHERE id =OBJECT_ID('dbo.Orders') AND indid <2

    避免在存储过程,触发器,函数和批处理中重复调用函数,应该将结果存储在一个变量中,以后就可以直接使用了。

    不要使用SP_xxx作为命名约定,它会导致额外的搜索,增加I/O(因为系统存储过程的名字就是以SP_开头的),同时这么做还会增加与系统存储过程名称冲突的几率

    简单实用的文章
    http://xsxjb.iteye.com/blog/1140036

  • 相关阅读:
    使用C#调用Java带MIME附件WebService方法的初步设想
    到底是哪里给我插的广告?
    jQuery mobile X天教程 目录
    让ksoap支持wsse加密的soap报文
    第一天 认识jQuery mobile 框架,资源,书籍
    谈谈去那里找开源项目
    第二天 jQuery mobile 的Page&Dialogs,Toolbars,Button,listView全接触
    增强型MonkeyRunner 脚本计划
    以前我喜欢盗版,但是,我现在痛恨盗版
    android Handler 机制研究学习笔记
  • 原文地址:https://www.cnblogs.com/lofty/p/5167002.html
Copyright © 2011-2022 走看看