数据优化--操作优化
数据优化--操作优化
数据库优化包含以下三部分,数据自身优化,数据库表优化,程序操作优化。此文为程序的操作优化
详情请看下图
一操作符优化
1 IN, Not IN操作符
IN和Exists性能有外表和内标区分,但是在大数据量的表中推荐使用exists代替
Not In是不会做索引的,可以用Not Exsits代替
2 Is Null 或Is not NULL操作
索引是不索引空值的,所以这样的操作不能使用索引,可以用其他的办法处理,例如:数字类型,判断大于0,字符串类型设置一个默认值,判断是否等于默认值即可
3不等于操作符
不等于操作符是永远不会用到索引的,因此对它的处理只会产生全表扫描。 用其它相同功能的操作运算代替,如 a<>0 改为 a>0 or a<0 a<>’’ 改为 a>’’
4用全文索引索引文本数据,取代like搜索
(1)全文搜索让你可以实现like不能完成的复杂搜索,如搜索一个单词或一个短语,搜索一个与另一个单词或短语相近的单词或短语,或者是搜索同义词;
(2)实现全文搜索比实现like搜索更容易(特别是复杂的搜索);
(3)要明白,通配符的使用时会降低查询的速度,主要是使用通配符系统会不使用索引进行查询的
二 SQL语句的优化
1,在从初学中不使用select*
为什么不能使用,地球人都知道,但是很多人都习惯这样用,要明白能省就省,而且这样查询数据库不能利用“覆盖索引”了
2,尽量写 Where子句
尽量不要写没有where的SQL语句
3避免使用临时表
(1)除非却有需要,否则应尽量避免使用临时表,相反,可以使用表变量代替;
(2)大多数时候(99%),表变量驻扎在内存中,因此速度比临时表更快,临时表驻扎在TempDb数据库中,因此临时表上的操作需要跨数据库通信,速度自然慢。
4 减少数据库的访问次数
程序设计中最好是将一些常用的变量放在内存中或放在其他方式减少数据库的访问次数
5减少重复的工作
这些主要是在客户端的程序中,注意:
A减少不必要的数据转换,减少数据转可以较少内存的开销,
B合并对同一表,同一条件多洗的更新(UPdate),
三 where使用的原则
1 在where子句中应该把最具有限制性的条件放在最前面
[sql] select * from table1 where field1<=10000 and field1>=0; select * from table1 where field1>=0 and field1<=10000;
如果数据表中的数据field1都>=0,则第一条select语句要比第二条select语句效率高的多,因为第二条select语句的第一个条件耗费了大量的系统资源。
2 where子句中字段的顺序和所以中字段顺序应该一致
select * from tab where a=… and b=… and c=…;
若有索引index(a,b,c),则where子句中字段的顺序应和索引中字段顺序一致。
3使用函数
select field3,field4 from tb where upper(field2)='RMN'不使用索引。
如果一个表有两万条记录,建议不使用函数;如果一个表有五万条以上记录,严格禁止使用函数!两万条记录以下没有限制。
小结
程序的操作优化,包括一些操作符号的使用, sql语句的精简和where使用的原则。
经验是经过不断的实践总结的,我们要善于总结他人的经验从中提炼,避免出现同样的额问题。