1.只查询有用的数据
横向来看,不要返回自己不需要的列,尽量不要使用select *;
纵向来看,不要返回自己不需要的行,尽量使用where条件来过滤自己需要的内容;
考虑使用top;
考虑使用分页;
对于聚合查询,可以用having子句进行进一步的过滤;
2.避免重复的SQL操作
避免同一SQL语句多次执行,业务上严格控制不必要的逻辑;
3.建议使用别名
多表链接,使用别名,提高解析速度,避免列名歧义引发的语法错误;
即便不命名别名,SQLServer也会给它一个别名,所以手动显示命名可以提高解析速度;
4.禁用隐式转化
类型匹配,特别是字符型和数值型;
varchar类型和nvarchar类型也是隐式转化,容易忽略;
5.union all 优于 union
列是相同的,包括列的类型、列的顺序、列的数量;
区别:union是在union all的基础上,删除重复的记录;
如果允许重复的记录或者查询除的数据本身没有重复记录,请使用union all;
union有默认排序;
UNION在进行表链接后会筛选掉重复的记录,所以在表链接后会对所产生的结果集进行排序运算,删除重复的记录再返回结果;
UNION ALL只是简单的将两个结果合并后就返回;
6.Like操作符
明确左侧内容时,左侧不应使用“%”通配;
左侧使用“%”通配,不会执行索引查找,造成性能问题;
7.避免对索引字段使用运算或者函数表达式
8.批量执行SQL
批量插入数据时,为了减少与数据库交互测试,可以每句sql后面加";";
最前加"begin",最尾加"end";
9.空、空格、null
‘’‘与’ '相同,与null不同;
’<>'是查询不出null值的;
----------------------------------------分割线----------------------------
10.行转列,列转行
1)PIVOT函数,行转列
PIVOT(<聚合函数>([聚合列值])FOR[行转列前的列名]IN([行转列后的列名1],[行转列后的列名2],[行转列后的列名3],.......[行转列后的列名N]));
例子2)UNPIVOT函数,列转行
UNPIVOT([转换为行的列值在转换后对应的列名]for[转换为行的列名在转换后对应的列名]in([转换为行的列1],[转换为行的列2],[转换为行的列3],...[转换为行的列N]));
11.分页 OFFSET FETCH NEXT
ORDER BY a.TransDate DESC OFFSET $SkipCount$ ROWS FETCH NEXT $PageSize$ ROWS ONLY
网友评论