sql优化

来源:互联网 发布:mac设置桌面图标 编辑:程序博客网 时间:2024/06/07 00:48

● SQL文要求简洁明了,不能有多余的关键词或外连接。
● 如果返回结果可能很大,尽量避免使用JOIN。
●  多表连接时,表格名称要求使用简介的别名(如:a、b等)。
● SELECT语句禁止使用*符号,必须明确需要的字段名称。
● SELECT语句不要返回所有列,根据应用需要返回特定的列。
● 如果是组合主键,查询谓词是主键,谓词顺序与组合主键的列顺序保持一致。
●  当谓词使用不等于(<>)条件时,如果谓词列是枚举类型,把它改写成用or连接起来的等于条件。
●  如果几个SQL文谓词列相同,要求它们的顺序相同。
● LIKE条件尽量不要出现内包含条件(%mike%),可以使用前包含条件(mike%)。
●  在查询谓词的左边不要使用函数。
●  如果SQL文含非常多的谓词并且存在or关系,可以将SQL文拆分成两个SQL文以提高执行效率(这样做使执行计划清晰并且添加合适的索引)。
● 将含not  in语句改为not exists实现:
DELETE FROM tb01 WHERE c1 not in (SELECT c1 FROM  tb02)
优化后:
DELETE FROM tb01 WHERE NOT EXISTS(SELECT c1 FROM tb02 WHERE  tb01.c1= tb02.c1)

 

in和EXISTS,需看数据量

like在可接受的情况下,都使用后匹配mike%

 

谓词或操作符的的左边尽量不使用函数(尽sql有效,操作集合,对C#无意义,但可参考)

DELETE UserLog WHEREDATEDIFF(DAY,LogDate,getdate())>30

DELETE UserLog WHERE LogDate>DateAdd(DAY,-30,getdate()),可扩展索引

常用索引,早期加,应用索引再后期调优阶段增加,根据界面、使用频率来增加。

外部关键pk要少,可少用关链,可拆分数据库,但最好模块外不建外键,内部可外部,以保证数据的完整性。