zoukankan      html  css  js  c++  java
  • SQL编码中注意的性能问题

    1、选择合适的数据类型
    为列选择最小化的数据类型
    假设一列中的文本长度不一,使用VARCHAR而不是CHAR
    不存储Unicode不要使用NVARCHAR或者NCHAR
    假设一行的长度不超过8000,使用VARCHAR而不是TEXT
    对于仅存数字的列要使用数字类型而不要用字符类型
    不要使用字符串类型存储日期数据。


    2、慎重使用触发器
    保持触发器内的代码最小化
    可能的情况下尽量用其它更高效的技术替代触发器
    尽量避免回滚触发器
    3、仅仅返回须要的数据
    横向来看,不要返回自己不须要的列,尽量不要使用select *
    纵向来看,不要返回自己不须要的行,尽量使用where条件来过滤自己须要的内容
    考虑使用TOP
    考虑分页
    对于聚合查询,能够用HAVING子句进一步限定返回的行。
    4、尽量少做反复的工作
    控制同一语句的多次运行,特别是一些基础数据的多次运行。
    降低多次的数据转换,或许须要数据转换是设计的问题,可是降低次数是能够做到的。
    合并对同一表同一条件的多次UPDATE,
    UPDATE操作不要拆成DELETE操作+INSERT操作的形式。尽管功能同样。可是性能区别是非常大的。
    不要写一些没有意义的查询。
    插入大量数据时,尽量不要使用循环,能够使用CTE。假设要使用循环。也放到一个事务中;
    5、注意暂时表使用方法
    在复杂系统中,暂时表非常难避免。关于暂时表须要注意:
    语句非常复杂,连接太多,能够考虑用暂时表分步完毕。
    多次用到一个大表的同一部分数据,考虑用暂时表暂存数据。
    须要综合多个表的数据,形成一个结果。能够考虑用暂时表分步汇总这多个表的数据。


    其它情况下。应该控制暂时表和表变量的使用。
    注意排序规则。
    关于暂时表产生使用SELECT INTO和CREATE TABLE + INSERT INTO的选择.
    6、避免使用游标
    对于某些逐行的处理考虑放在client
    考虑使用关联的子查询取代游标
    必须使用游标时注意下面问题:
    使用高效的游标类型(比如 forward-only)
    使用server端游标时保持结果集尽量小。


    游标使用结束时不能只CLOSE,还要DEALLOCATE。
    7、 恰当使用连接
    对于频繁连接的表用于连接的列须要有合适的索引
    用于连接的列尽量使用同样的数据类型
    避免将唯一值非常少的列用过连接列,否则会导致scan
    假设有些查询须要对4个或很多其它的表进行连接,能够考虑低范化一些表
    8、 其它须要注意的地方
    问题发现的越早解决的成本越低,非常多性能问题能够在编码阶段就发现,为了提早发现性能问题,须要注意:
    程序猿注意、关心各表的数据量。


    编码过程和单元測试过程尽量用数据量较大的数据库測试,最好能用实际数据測试。
    每一个SQL语句尽量简单
    不要频繁更新有触发器的表的数据
    注意数据库函数的限制以及其性能

  • 相关阅读:
    dremio mysql arp integer 超出最大值的问题
    cube.js bi connector 实现说明
    cube.js 最新版本特性
    PLSQL Developer使用大全
    Git回滚Merge
    建模与外化:操纵抽象的能力
    Oc的异常触发
    iOS开发:Release/Debug模式与Configuration
    技术解耦和团队解耦
    头文件的作用—声明符号、类型、函数而不是定义变量
  • 原文地址:https://www.cnblogs.com/brucemengbm/p/7070842.html
Copyright © 2011-2022 走看看