UDN-企业互联网技术人气社区

板块导航

浏览  : 2703
回复  : 10

[面试相关] SQL语句优化的策略都有哪些?

[复制链接]
蝴蝶结叔叔的头像 楼主
发表于 2015-6-1 11:46:57 | 显示全部楼层 |阅读模式
● 创建表的时候。应尽量建立主键,根据主键查询数据;
● 大数据表删除,用truncate table代替delete。
● 合理使用索引,在OLTP应用中一张表的索引不要太多。组合索引的列顺序尽量与查询条件列顺序保持一致;对于数据操作频繁的表,索引需要定期重建,以减少失效的索引和碎片。
● 查询尽量用确定的列名,少用*号。
尽量少嵌套子查询,这种查询会消耗大量的CPU资源;对于有比较多
or运算的查询,建议分成多个查询,用union all联结起来;多表查询
的查询语句中,选择最有效率的表名顺序(基于规则的优化器中有效)。Oracle解析器对表解析从右到左,所以记录少的表放在右边。
● 尽量多用commit语句提交事务,可以及时释放资源、解
锁、释放日志空间、减少管理花费;在频繁的、性能要求比较高的
数据操作中,尽量避免远程访问,如数据库链等,访问频繁的表可
以常驻内存:alter table...cache;
发表于 2015-6-5 22:00:45 | 显示全部楼层
蝴蝶结叔叔,多分享一些好的帖子给我们哈
使用道具 举报

回复

发表于 2015-6-8 10:39:21 | 显示全部楼层
支持叔叔
使用道具 举报

回复

发表于 2015-6-8 11:20:01 | 显示全部楼层
很实用,语句的优化
使用道具 举报

回复

发表于 2015-6-8 11:20:36 | 显示全部楼层
辛苦叔叔
使用道具 举报

回复

发表于 2015-6-8 11:21:10 | 显示全部楼层
给叔叔点赞
使用道具 举报

回复

发表于 2015-8-6 15:45:34 | 显示全部楼层
等一个文档,闲的无聊,喷两句。
第三点不准确, 组合索引的顺序和列的使用频度有关系,和where条件顺序没关系。在cbo里面,where条件里列的顺序已经没限制了。频繁修改表也不一定产生碎片,只有某类型的操作(导致已有的索引槽没数据)才会差生碎片。

第四点也不太准确, oracle有查询转换,如果多个or 都能通过高效的索引来查询,oracle自己会去转换(or中的列不相同的情况,如果所有列都有高效索引,可能会适合改写成union all)。 如果or中的某一个或者多个不能有效利用索引,那你死定了, 执行计划会导致一次或者多次全表扫描外加几次索引扫描。

第5点也不太准确,至少在oracle中不能这么做,sqlserver好像鼓励这么做。oltp中不能牺牲事务完整性来提高性能, 而且频繁提交只会降低性能。


使用道具 举报

回复

发表于 2016-1-18 09:16:30 | 显示全部楼层
很实用,弱弱地问一句,用SQL Server的话用commit也能释放资源吗?
使用道具 举报

回复

发表于 2016-1-19 18:45:39 来自手机 | 显示全部楼层
使用道具 举报

回复

发表于 2016-2-13 21:09:07 来自手机 | 显示全部楼层
使用道具 举报

回复

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关于我们
联系我们
  • 电话:010-86393388
  • 邮件:udn@yonyou.com
  • 地址:北京市海淀区北清路68号
移动客户端下载
关注我们
  • 微信公众号:yonyouudn
  • 扫描右侧二维码关注我们
  • 专注企业互联网的技术社区
版权所有:用友网络科技股份有限公司82041 京ICP备05007539号-11 京公网网备安1101080209224 Powered by Discuz!
快速回复 返回列表 返回顶部