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语句尽量简单

不要频繁更新有触发器的表的数据

注意数据库函数的限制以及其性能

SQL编码中注意的性能问题的更多相关文章

  1. 为什么SQL语句Where 1=1 and在SQL Server中不影响性能

        最近一个朋友和我探讨关于Where 1=1 and这种形式的语句会不会影响性能.最后结论是不影响.     虽然结论正确,但对问题的认识却远远没有解决问题的根本.实际上在T-SQL语句的书写过 ...

  2. SQL SERVER中一些常见性能问题的总结

    1.对查询进行优化,应尽量避免全表扫描,首先应考虑在 where 及 order by 涉及的列上建立索引. 2.应尽量避免使用 left join 和 null 值判断.left join 比 in ...

  3. sql中NVARCHAR(MAX) 性能和占空间分析 varchar(n),nvarchar(n) 长度性能及所占空间分析

    varchar(n),nvarchar(n) 中的n怎么解释: nvarchar(n)最多能存n个字符,不区分中英文. varchar(n)最多能存n个字节,一个中文是两个字节. 所占空间: nvar ...

  4. SQL Server中提前找到隐式转换提升性能的办法

        http://www.cnblogs.com/shanksgao/p/4254942.html 高兄这篇文章很好的谈论了由于数据隐式转换造成执行计划不准确,从而造成了死锁.那如果在事情出现之前 ...

  5. SQL Server中使用Check约束提升性能

        在SQL Server中,SQL语句的执行是依赖查询优化器生成的执行计划,而执行计划的好坏直接关乎执行性能.     在查询优化器生成执行计划过程中,需要参考元数据来尽可能生成高效的执行计划, ...

  6. SQL SERVER中用户定义标量函数(scalar user defined function)的性能问题

    用户定义函数(UDF)分类  SQL SERVER中的用户定义函数(User Defined Functions 简称UDF)分为标量函数(Scalar-Valued Function)和表值函数(T ...

  7. SQL Server中一个隐性的IO性能杀手-Forwarded record

    简介     最近在一个客户那里注意到一个计数器很高(Forwarded Records/Sec),伴随着间歇性的磁盘等待队列的波动.本篇文章分享什么是forwarded record,并从原理上谈一 ...

  8. SQL Server中多表连接时驱动顺序对性能的影响

    本文出处:http://www.cnblogs.com/wy123/p/7106861.html (保留出处并非什么原创作品权利,本人拙作还远远达不到,仅仅是为了链接到原文,因为后续对可能存在的一些错 ...

  9. 编码中常用的SQL语法

    蓝色标注的都是比较常见的SQL ====================== 开发中常见的SQL: left join , right join 防止丢弃数据 inner join CASE WHNE ...

随机推荐

  1. HDU 4394 BFS

    M2%10x=N (x=0,1,2,3....) 给出N.找到最小的满足条件的M 因为:N的个位仅仅由M的个位决定.N十位由M的个位和十位决定,N的百位由M的个位十位百位决定.以此类推 全部从个位開始 ...

  2. unity3d 中动画的帧事件

    代码事件监听 using UnityEngine; using System.Collections; public class BoxEventScript : MonoBehaviour { vo ...

  3. spark Bisecting k-means(二分K均值算法)

    Bisecting k-means(二分K均值算法) 二分k均值(bisecting k-means)是一种层次聚类方法,算法的主要思想是:首先将所有点作为一个簇,然后将该簇一分为二.之后选择能最大程 ...

  4. oracle手工生成AWR报告方法

    AWR(Automatic Workload Repository)报告是我们进行日常数据库性能评定.问题SQL发现的重要手段.熟练掌握AWR报告,是做好开发.运维DBA工作的重要基本功. AWR报告 ...

  5. 不使用Store安装WSL

    Windows Store经常会因为各种原因打不开, 这时候我们可以尝试直接下载安装WSL     1. PowerShell里运行下载: PS C:\WINDOWS\system32> Inv ...

  6. 39.Qt XML

    1.使用QXmlStreamReader读取XML,可以读取内存中容纳不了的特大文件,或者读取在XML文档中定制的文档的内容. xml文件(in1.xml) <?xml version=&quo ...

  7. Ubuntu下安装tim/QQ/微信

    一.安装deepin-wine环境: 上https://github.com/wszqkzqk/deepin-wine-ubuntu页面下载zip包(或用git方式克隆),在“下载”目录下原地解压即可 ...

  8. DOM相关知识点

    内容待补充... DOM相关注意题目: DOM的最小组成单位叫做 //节点 Node DOM 有自己的国际标准,目前的通用版本是 //DOM 3 DOM 树的根节点 //HTML 元素 Element ...

  9. 一个基于React整套技术栈+Node.js的前端页面制作工具

    pagemaker是一个前端页面制作工具,方便产品,运营和视觉的同学迅速开发简单的前端页面,从而可以解放前端同学的工作量.此项目创意来自网易乐得内部项目nfop中的pagemaker项目.原来项目的前 ...

  10. 有关DevExpress 安装后vs工具箱不显示图标的错误

    在https://www.devexpress.com/Support/Center/Question/Details/T214296/missing-icons-from-toolbox找到解决方法 ...