sql优化:
2015-10-07 14:34
246 查看
1、针对大数据量的,避免使用 or 操作
select*from user_info where username like ‘yue%’ or username like '%yue'
可优化成:
select*from user_info where username like ‘yue%’
union
select*from user_info where username like '%yue'
2、除非必要,否则不要在关键词前加%,加了必然走全表扫描
3、使用“临时表”暂存中间结果避免程序中多次扫描主表,也大大减少了程序执行中“共享锁”阻塞“更新锁”,减少了阻塞,提高了并发性能
4、统一SQL语句的写法
select*from dual
select*From dual
其实就是大小写不同,查询分析器就认为是两句不同的SQL语句,必须进行两次解析。生成2个执行计划。所以作为程序员,应该保证相同的查询语句在任何地方都一致,多一个空格都不行!
5、不要以字符格式声明数字,要以数字格式声明字符值。(日期同样)否则会使索引无效,产生全表扫描。
SELECT emp.ename, emp.job FROM emp WHERE emp.empno = 7369;
不要使用:SELECT emp.ename, emp.job FROM emp WHERE emp.empno = '7369'
6、SELECT子句中避免使用 ‘ * ‘:
ORACLE在解析的过程中, 会将'*' 依次转换成所有的列名, 这个工作是通过查询数据字典完成的, 这意味着将耗费更多的时间
select*from user_info where username like ‘yue%’ or username like '%yue'
可优化成:
select*from user_info where username like ‘yue%’
union
select*from user_info where username like '%yue'
2、除非必要,否则不要在关键词前加%,加了必然走全表扫描
3、使用“临时表”暂存中间结果避免程序中多次扫描主表,也大大减少了程序执行中“共享锁”阻塞“更新锁”,减少了阻塞,提高了并发性能
4、统一SQL语句的写法
select*from dual
select*From dual
其实就是大小写不同,查询分析器就认为是两句不同的SQL语句,必须进行两次解析。生成2个执行计划。所以作为程序员,应该保证相同的查询语句在任何地方都一致,多一个空格都不行!
5、不要以字符格式声明数字,要以数字格式声明字符值。(日期同样)否则会使索引无效,产生全表扫描。
SELECT emp.ename, emp.job FROM emp WHERE emp.empno = 7369;
不要使用:SELECT emp.ename, emp.job FROM emp WHERE emp.empno = '7369'
6、SELECT子句中避免使用 ‘ * ‘:
ORACLE在解析的过程中, 会将'*' 依次转换成所有的列名, 这个工作是通过查询数据字典完成的, 这意味着将耗费更多的时间
相关文章推荐
- 大话数据库技术之数据的检索
- SQLSERVER 备份方案的选择
- Azure Redis Cache (1) 入门
- NoSQL学习二:MongoDB基本管理命令
- Sqlite的基本用法
- 数据库 SQL 2005 知识点三
- NoSQL学习二:MongoDB基本管理命令
- Redis 客户端Jedis使用(一)
- Mysql数据库存储引擎
- (转)Mysql数据库存储引擎
- CentOS 6.5 下安装 Redis 2.8.7
- shiro安全框架扩展教程--如何扩展实现集中式session管理(redis,memcached等)
- Windows下mysql忘记root密码的解决方法
- Azure Redis Cache (1) 入门
- 淘宝从数据库中返回的的记录数组是存在内存吗?
- eq_range_index_dive_limit决定COST估算方式
- Navicat MySQL
- B-树和B+树的应用:数据搜索和数据库索引
- (转)B-树和B+树的应用:数据搜索和数据库索引
- MySql数据库索引原理(总结性)