NC31开发环境培训.ppt

上传人:sh****n 文档编号:6387515 上传时间:2020-02-24 格式:PPT 页数:20 大小:463KB
返回 下载 相关 举报
NC31开发环境培训.ppt_第1页
第1页 / 共20页
NC31开发环境培训.ppt_第2页
第2页 / 共20页
NC31开发环境培训.ppt_第3页
第3页 / 共20页
点击查看更多>>
资源描述
Sql效率经验总结 SQL开发观点 对于客户 服务器结构的数据库应用程序来说 减少网络传输的数据量直接影响到应用程序的性能 在编程时应注意尽量减少网络流量 避免不必要的数据传输 另外 数据库的加锁机制和事务处理也会直接影响到一个应用程序性能的好坏 在这里提供一些建议供大家参考 合理使用存储过程 将完成一个功能的SQL语句写成存储过程 不但可以减少网络流量 而且由于存储过程是预编译的 能进一步提高响应速度 WHERE子句 在SELECT语句中通过使用WHERE子句来减少返回的记录数 去掉不需要的字段 避免使用SELECT FROM语句 要使用SELECTF1 F2FROM语句 去掉不需要的字段 避免显式或隐含的类型转换 避免显式或隐含的类型转换 如在WHERE子句中Numeric型和Int型的列的比较 SQLSERVER 在SELECT语句中 如果表中的大部分记录符合查询条件 尽管WHERE子句中的字段上有索引 但SQLSERVER不会使用索引 而是顺序扫描该表 复合索引 对于复合索引要注意 例如在建立复合索引时列的顺序是F1 F2 F3 则在WHERE或ORDERBY子句中这些字段出现的顺序要与建立索引时的字段顺序一致 可以是F1或F1 F2或F1 F2 F3 否则SQLSERVER不会用到该索引 尽快地提交事务 SQLSERVER为了支持事务一致性 对共享的资源上保留锁直至事务被提交 其他要使用相同资源的用户必须要等待 如果一个事务变长的话 锁的队列以及等待锁的用户队列将会变长 这最终导致系统吞吐量的降低 长的事务还增加了出现死锁的可能性 具体包括在事务中不能包含用户交互 避免更新同一数据两次 大批量的数据更新放在事物的后面部分等 尽量减少对列的四则运算 在WHERE子句中 尽量减少对列的四则运算 例如 selectcolAfromtableAwheresalary 12 12000应该用如下语句代替 selectcolAfromtableAwheresalary 1000在WHERE子句中 尽量用 代替 例如 selectF1fromTable1wherea 3 其中a为int型 在该例中 a列上是有索引的 SQLSERVER扫描索引页 直到a 3的页 然后顺序扫描 直到a 4 如果a 3的记录很多 会有很多无效的I O操作 应该用如下语句代替 electF1fromTable1wherea 4 避免在IFEXISTS和IN操作符中使用NOT 因为不使用NOT SQLSERVER在得到满足条件的第一条记录后返回 而使用NOT操作符 SQLSERVER可能要扫描整个表 例如 ifnotexists select fromtableAwhere beginstatementgrouponeendelsebeginstatementgrouptwoend应该用如下语句代替 ifexists select fromtableAwhere beginstatementgrouptwoendelsebeginstatementgrouponeend IFEXISTS语句 在判断有无符合条件的记录时不要用SELECTCOUNT 语句 而是要用IFEXISTS语句 例如 declare varintselect var count fromemployeewhereemp id 123if var 0 moresqlcode 应该用如下语句代替 ifexists select1fromemployeewhereemp id 123 begin moresqlcode end WHERE子句中的等于列 1 在WHERE子句中如果对于某列有等于的条件 则在SELECT子句中不应该出现该列 例如 selectcust number cust namefromcustomerwherecust number 612应该用如下语句代替 selectcust namefromcustomerwherecust number 612 WHERE子句中的等于列 2 在WHERE子句中如果对于某列有等于的条件 则在ORDERBY子句中不应该出现该列 例如 selectcust number cust name cust stfromcustomerwherecust st L orderbycust st cust name应该用如下语句代替 selectcust number cust namefromcustomerwherecust st L orderbycust number 同一个列的多个OR条件 在WHERE子句中 对于同一个列的多个OR条件 用IN操作符来代替 例如 selectcust number cust name cust stfromcustomerwherecust st L orcust st A orcust st I orderbycust st cust number应该为 selectcust number cust name cust stfromcustomerwherecust stin L A I orderbycust st cust number 求最大值和最小值的列 对于要求最大值和最小值的列 如果在该列上有索引 则要分开用两个SQL语句来求 例如 selectmax price min price fromtitles price上有索引 应该用如下语句代替 selectmax price fromtitlesselectmin price fromtitles 对于能用联结实现的功能 不要用子查询实现 例如 selectnamefromcustomerwherecustomer idin selectcustomer idfromorderwheremoney 1000 应该用如下语句代替 selectnamefromcustomerinnerjoinorderoncustomer customer id order customer idwhereorder money 100 检查被更新的行数时 在检查被更新的行数时用 rowcount 而不用selectcount 例如 selectcount fromcustomerwherecust st 1 andcust code 2 updatecustomersetcust discount 15wherecust st 1 andcust code 2 应该用如下语句代替 updatecustomersetcust discount 15wherecust st 1 andcust code 2 select update count rowcount 通配符 的使用 对于通配符 的使用 如果该通配符放在匹配模式的前面 将引起SQL引擎对表进行扫描 而不使用索引 例如 selectVen IDfromvendorwherenamelike a 如有可能 可用如下语句代替 selectVen IDfromvendorwherenamelike a z a
展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 图纸专区 > 课件教案


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!