同事罗列的,备忘,后续再深入研究:
数据库的特长在基于数据集操作。
避免没有where条件的SQL语句。
能够过滤最多数据的条件靠近where。
避免对索引字段的计算。
count(*)=count(1)
避免包含否定运算符的表达式,如:<>、not in/not exists/not like
查询方式(=int,>int,<int,=char,>char,<char, like ‘char%’,like ‘%char%’…)
小心数据库引擎隐性转换数据类型后不能利用索引。
小心复合索引的利用。
union和union all。
分批查询,避免长SQL和子查询联表。
嵌套子查询把能过滤最多行数的查询放在最里层。
联表查询或执行sp_executesql时,关联条件的字段类型要匹配,包括长度也要匹配。
充分利用函数和存储过程,也可以用sp_executesql代替,注意避免重编译。
exec string和exec sp_executesql
联表时要指定别名,条件要用别名,减少编译时消耗的资源。
把字段写全。
执行计划中,table scan<index scan<index seek<key scan<key seek。
set statistics io/time on验证优化是否成功。
数据库的特长在基于数据集操作。
避免没有where条件的SQL语句。
能够过滤最多数据的条件靠近where。
避免对索引字段的计算。
count(*)=count(1)
避免包含否定运算符的表达式,如:<>、not in/not exists/not like
查询方式(=int,>int,<int,=char,>char,<char, like ‘char%’,like ‘%char%’…)
小心数据库引擎隐性转换数据类型后不能利用索引。
小心复合索引的利用。
union和union all。
分批查询,避免长SQL和子查询联表。
嵌套子查询把能过滤最多行数的查询放在最里层。
联表查询或执行sp_executesql时,关联条件的字段类型要匹配,包括长度也要匹配。
充分利用函数和存储过程,也可以用sp_executesql代替,注意避免重编译。
exec string和exec sp_executesql
联表时要指定别名,条件要用别名,减少编译时消耗的资源。
把字段写全。
执行计划中,table scan<index scan<index seek<key scan<key seek。
set statistics io/time on验证优化是否成功。