2. 不等于统一使用 "<>" 。虽然 SQLServer 认为 "!=" 和 "<>" 是等价的,都代表不等于的意
义。为了统一,不等于一律使用 "<>" 表示
3. 使用表的别名 , 数据库查询,必须使用表的别名。
4.SQL
文对表字段扩展的兼容性 。 在
C#
里使用
Select *
时 , 严禁通过
getString(1)
的形式
得到查询结果,必须使用 getString(" 字段名 ") 的形式;使用 Insert 时,必须指定插入的字段
名,严禁不指定字段名直接插入 values
5. 减少子查询的使用。子查询除了可读性差之外,还在一定程度上影响了 SQL 运行效
率,请尽量减少使用子查询的使用,用其他效率更高、可读性更好的方式替代。
6.
适当添加索引以提高查询效率,适当添加索引可以大幅度的提高检索速度,请参 看
SQLSERVER SQL 性能优化系列。
7. 对数据库表操作的特殊要求
本项目对数据库表的操作还有以下特殊要求:
1). 以逻辑删除替代物理删除
注意:现在数据库表中数据没有物理删除,只有逻辑删除
以 deleteflag 字段作为删除标志, deleteflag='1' 代表此记录被逻辑删除,因此在查询数
据时必须考虑 deleteflag 的因素, deleteflag 的标准查询条件: NVL(deleteflag, '0') <> '1'
2). 增加记录状态字段
数据库中的每张表基本都有以下字段: DELETEFLAG 、 UPDATECOUNT 、 CREDATE 、
CREUSER
、
UPDATETIME
、
UPDATEUSER
要注意在对标进行操作时必须考虑以下字段
插入一条记录时要置 DELETEFLAG='0', UPDATECOUNT=0, CREDATE=sysdate, CREUSER= 登
录 User ;查询一条记录时要考虑 DELETEFLAG ,如果有可能对此记录作更新时还要取 得
UPDATECOUNT 作同步检查 ; 修改一条记录时要置 UPDATETIME=sysdate, UPDATEUSER= 登 录
User, UPDATECOUNT=(UPDATECOUNT+1) mod 1000,
;删除一条记录时要置
DELETEFLAG='1'
3). 历史表
数据库里部分表还存在相应的历史表 , 比如 srv_twc_f 和 srv_twchistory_f , 在查询数据
时除了检索所在表之外,还必须检索相应的历史表,对二者的结果做 Union (或 Union All )
8. 用执行计划分析 SQL 性能
EXPLAIN PLAN
是一个很好的分析
SQL
语句的工具 , 它可以在不执行
SQL
的情况下分析
语句。通过分析,我们就可以知道 SQLSERVER 是怎样连接表,使用什么方式扫描表(索引
扫描或全表扫描 ) ,以及使用到的索引名称,按照从里到外,从上到下的次序解读分析的结
果, EXPLAIN PLAN 的分析结果是用缩进的格式排列的,最内部的操作将最先被解读,如果
两个操作处于同一层中 , 带有最小操作号的将首先被执行 。 目前许多第三方的工具如 PLSQL
Developer
和
TOAD
等都提供了极其方便的
EXPLAIN PLAN
工具,
PG
需要将自己添加的查 询
SQL 文记入 log ,然后在 EXPLAIN PLAN 中进行分析,尽量减少全表扫描,
SQLSERVER SQL 性能优化系列
1. 选择最有效率的表名顺序
(
只在基于规则的优化器中有效
)
SQLSERVER
的解析器按照从右到左的顺序处理
FROM
子句中的表名,因此
FROM
子句
中写在最后的表(基础表 driving table )将被最先处理,在 FROM 子句中包含多个表的情况
下,必须选择记录条数最少的表作为基础表,当 SQLSERVER 处理多个表时,会运用排序及
合并的方式连接它们,
首先 , 扫描第一个表 ( FROM 子句中最后的那个表
)
并对记录进行排序 ; 然后扫描第二
个表(
FROM
子句中最后第二个表
)
;最后将所有从第二个表中检索出的记录与第一个表中
评论0
最新资源