- 浏览: 658073 次
- 性别:
- 来自: 深圳
文章分类
- 全部博客 (609)
- java (139)
- 数据库 (107)
- 微信 (23)
- IT生活 (5)
- web前端 (74)
- SSH (11)
- 设计模式 (12)
- 重要资料 (11)
- 其他 (15)
- java技巧 (23)
- 服务器 (9)
- 2D/GUI (3)
- JAVA3D (2)
- ANT (5)
- Apache项目 (19)
- 数据类型 (10)
- 报表 (3)
- Collections (6)
- SQL/JDBC (15)
- 开发类 (6)
- EJB (6)
- Email (6)
- 文件读写 (2)
- 游戏 (0)
- Flex (2)
- Generic (2)
- HIbernate (12)
- I18N (5)
- Java EE (9)
- java ME (4)
- JDK 6 (8)
- JNDI/LDAP (5)
- JSP (7)
- JSTL (2)
- 正则表达式 (2)
- 安全 (2)
- Struts2 (12)
- Spring (4)
- Web服务 (10)
- Xml (1)
- JavaScript (30)
- AJAX (7)
- 验证 (4)
- 上传下载 (1)
- office办公软件 (1)
- Android (2)
- IOS (0)
- Dubbo (3)
- memcached/redis (1)
- 小程序 (1)
- 微信公众号 (0)
最新评论
-
wf_wangfeng:
怎么我用第一种方法不行呢 alert(document.rea ...
当jsp页面完全加载完成后执行一个js函数 -
Lori_Liu:
有帮助,至少可以解决了目前所遇到的问题!谢谢..
当jsp页面完全加载完成后执行一个js函数 -
starbhhc:
String actionMessage = new Stri ...
Java读取txt文件乱码 -
starbhhc:
Sev7en_jun 写道GOOD
客气,互相交流。。
javaeye论坛规则小测验(答案)--star -
Sev7en_jun:
GOOD
javaeye论坛规则小测验(答案)--star
1.多where,少having
where用来过滤行,having用来过滤组
2.多union all,少union
union删除了重复的行,因此花费了一些时间
3.多Exists,少in
Exists只检查存在性,性能比in强很多,有些朋友不会用Exists,就举个例子
例,想要得到有电话号码的人的基本信息,table2有冗余信息
select * from table1;--(id,name,age)
select * from table2;--(id,phone)
in:
select * from table1 t1 where t1.id in (select t2.id from table2 t2 where t1.id=t2.id);
Exists:
select * from table1 t1 where Exists (select 1 from table2 t2 where t1.id=t2.id);
4.使用绑定变量
Oracle数据库软件会缓存已经执行的sql语句,复用该语句可以减少执行时间。
复用是有条件的,sql语句必须相同
问:怎样算不同?
答:随便什么不同都算不同,不管什么空格啊,大小写什么的,都是不同的
想要复用语句,建议使用PreparedStatement
将语句写成如下形式:
insert into XXX(pk_id,column1) values(?,?);
update XXX set column1=? where pk_id=?;
delete from XXX where pk_id=?;
select pk_id,column1 from XXX where pk_id=?;
5.少用*
很多朋友很喜欢用*,比如:select * from XXX;
一般来说,并不需要所有的数据,只需要一些,有的仅仅需要1个2个,
拿5W的数据量,10个属性来测试:
(这里的时间指的是PL/SQL Developer显示所有数据的时间)
使用select * from XXX;平均需要20秒,
使用select column1,column2 from XXX;平均需要12秒
(我的机子不是很好。。。)
对于开发来说,这一条是个灾难,知道是一回事,做就是另一回事了
6.分页sql
一般的分页sql如下所示:
sql1:select * from (select t.*,rownum rn from XXX t)where rn>0 and rn <10;
sql2:select * from (select t.*,rownum rn from XXX t where rownum <10)where rn>0;
乍看一下没什么区别,实际上区别很大...125万条数据测试,
sql1平均需要1.25秒(咋这么准呢? )
sql2平均需要... 0.07秒
原因在于,子查询中,sql2排除了10以外的所有数据
当然了,如果查询最后10条,那效率是一样的
7.能用一句sql,千万别用2句sql
不解释
(补充内容)
第6条指的是是oracle数据库。
第7条本来不准备解释的,也有这么多质疑的,说明追寻真理的朋友还是相当多的。
我认为数据库当掉确实很有可能,我没想到是我的问题。
以上各条只针对sql如何优化,至于开发效率低,可读性等等,并不在考虑范围内
(补充内容2)第6条,如果有分页需要排序,必须再包一层,结果为
select * from (select t.*, rownum rn from (select * from XXX order by value desc) t where rownum <= 10 ) where rn > 0;
(补充内容3)第3条,用in的朋友注意了,当参数超过1000个,数据库就挂了。(oracle 10g数据库)
where用来过滤行,having用来过滤组
2.多union all,少union
union删除了重复的行,因此花费了一些时间
3.多Exists,少in
Exists只检查存在性,性能比in强很多,有些朋友不会用Exists,就举个例子
例,想要得到有电话号码的人的基本信息,table2有冗余信息
select * from table1;--(id,name,age)
select * from table2;--(id,phone)
in:
select * from table1 t1 where t1.id in (select t2.id from table2 t2 where t1.id=t2.id);
Exists:
select * from table1 t1 where Exists (select 1 from table2 t2 where t1.id=t2.id);
4.使用绑定变量
Oracle数据库软件会缓存已经执行的sql语句,复用该语句可以减少执行时间。
复用是有条件的,sql语句必须相同
问:怎样算不同?
答:随便什么不同都算不同,不管什么空格啊,大小写什么的,都是不同的
想要复用语句,建议使用PreparedStatement
将语句写成如下形式:
insert into XXX(pk_id,column1) values(?,?);
update XXX set column1=? where pk_id=?;
delete from XXX where pk_id=?;
select pk_id,column1 from XXX where pk_id=?;
5.少用*
很多朋友很喜欢用*,比如:select * from XXX;
一般来说,并不需要所有的数据,只需要一些,有的仅仅需要1个2个,
拿5W的数据量,10个属性来测试:
(这里的时间指的是PL/SQL Developer显示所有数据的时间)
使用select * from XXX;平均需要20秒,
使用select column1,column2 from XXX;平均需要12秒
(我的机子不是很好。。。)
对于开发来说,这一条是个灾难,知道是一回事,做就是另一回事了
6.分页sql
一般的分页sql如下所示:
sql1:select * from (select t.*,rownum rn from XXX t)where rn>0 and rn <10;
sql2:select * from (select t.*,rownum rn from XXX t where rownum <10)where rn>0;
乍看一下没什么区别,实际上区别很大...125万条数据测试,
sql1平均需要1.25秒(咋这么准呢? )
sql2平均需要... 0.07秒
原因在于,子查询中,sql2排除了10以外的所有数据
当然了,如果查询最后10条,那效率是一样的
7.能用一句sql,千万别用2句sql
不解释
(补充内容)
第6条指的是是oracle数据库。
第7条本来不准备解释的,也有这么多质疑的,说明追寻真理的朋友还是相当多的。
我认为数据库当掉确实很有可能,我没想到是我的问题。
以上各条只针对sql如何优化,至于开发效率低,可读性等等,并不在考虑范围内
(补充内容2)第6条,如果有分页需要排序,必须再包一层,结果为
select * from (select t.*, rownum rn from (select * from XXX order by value desc) t where rownum <= 10 ) where rn > 0;
(补充内容3)第3条,用in的朋友注意了,当参数超过1000个,数据库就挂了。(oracle 10g数据库)
发表评论
-
mysql创建用户并授权
2016-09-04 23:42 6131.新建用户。 //登录MYSQL mysql -u ... -
java实现文件转换成二进制存储与取出
2016-08-06 01:21 2743一、功能描述: 将文件转成二进制数据放入数据库中,需要的 ... -
Mongodb的全面总结
2016-07-14 16:35 1402MongoDB的官方文档基本是how to do的介绍,而关 ... -
Navicat连接Oracle数据库时报错ORA-28547
2016-07-12 15:46 707用Navicat连接Oracle数据库时出现如下错误提示: ... -
4.ubuntu14.04 安装mongodb笔记
2016-05-06 08:52 6721、使用系统自动获取安装。 1)获取更新 s ... -
3.mongdb mongdb的shell命令
2016-04-14 11:10 1000在mongdb的安装目录,运行mongo.exe,运 ... -
2.mongdb mongdb客户端使用
2016-04-14 10:26 791robomongo,命令行方便 ... -
1. WIN7下安装运行mongodb
2016-04-14 10:11 5381)、下载MongoDBhttp://downloads. ... -
mysql 与mongodb的特点与优劣
2016-04-13 17:37 980介绍: MongoDB是 ... -
报错:1130-host ... is not allowed to connect to this MySql server 开放mysql远程连接 不使用l
2015-07-06 13:16 826报错:1130-host ... is not allow ... -
sql查询今天、昨天、本周、本月、日期的
2015-05-15 10:55 1792sql 求解两个时间差 SELECTDATEDIFF ... -
druid demo
2015-04-08 15:13 1613java程序很大一部分要操作数据库,为了提高性能操作数据库的 ... -
Druid数据库连接池使用
2015-04-08 15:03 728阿里巴巴推出的国产数据库连接池,据网上测试对比,比目前的D ... -
Hibernate与 MyBatis的比较
2015-03-20 00:34 640mybatis是半自动的,hibernate是全自动的,就是 ... -
经典SQL语句大全
2015-01-16 01:02 563一、基础 1、说明:创建数据库CREATE DATABAS ... -
MyBatis的几种批量操作
2015-01-11 22:59 1692MyBatis中批量插入 方法一: &l ... -
spring与mybatis三种整合方法
2015-01-11 22:58 489本文主要介绍Spring与Mybatis三种常用整合方法, ... -
MyBatis(六)、MyBatis主配置文件
2015-01-11 22:58 692在定义sqlSessionFactory时需要指定MyBa ... -
MyBatis(五)、动态SQL语句
2015-01-09 01:01 738有些时候,sql语句where条件中,需要一些安全判断,例 ... -
MyBatis(四)、SQL语句映射文件(2)增删改查、参数、缓存
2015-01-09 01:00 5252.2 select 一个select 元素非常简单。例如 ...
相关推荐
### SQL优化原则及注意事项 #### 一、问题的提出与背景 在软件开发过程中,特别是在初期阶段,由于数据库中的数据量相对较少,开发者往往难以直观感受到不同SQL语句编写方式所带来的性能差异。然而,随着互联网...
(转)SQL 优化原则 一、问题的提出 在应用系统开发初期,由于开发数据库数据比较少,对于查询SQL语句,复杂视图的的编写等体会不出SQL语句各种写法的性能优劣,但是如果将应用系统提交实际应用后,随着数据库中...
【SQL优化原则】 1. **减少I/O操作**:I/O操作是数据库性能的瓶颈之一。优化的目标是尽量减少磁盘读写,避免不必要的数据传输,以减轻CPU的负担。 2. **优化排序操作**:频繁的排序操作会导致额外的计算开销,应当...
SQL优化原则是确保数据库高效运行的关键,它涉及到查询优化、索引策略、数据访问路径选择等多个方面。 1. **查询优化**:SQL查询的效率直接影响数据库的性能。优化查询通常包括减少不必要的JOIN操作,避免全表扫描...
在构造SQL语句的时候要养成良好的习惯。二、原则总结 原则1、仅列出需要查询的字段,这对速度不会明显的影响,主要是考虑节省应用程序服务器的内存。 原来语句: select * from admin 优化为: select admin_id,...
本文将详细介绍一些实用的SQL优化原则,帮助开发者和DBA们更好地理解和应用这些原则。 #### 二、具体优化原则 **1. 大批量数据插入时临时移除索引** - **场景**: 当需要向表中插入大量新记录时(通常是表中现有...
以下将详细解读部分Oracle SQL优化原则,涵盖查询执行计划、表扫描方式、SQL语句优化及数据访问顺序等方面。 #### 1. 查询执行计划的选择模式 Oracle提供了三种查询执行计划选择模式:`RULE`(基于规则)、`COST`...
Oracle SQL 优化原则是数据库管理员和开发人员提升数据库性能的关键技术。本文主要探讨了三个核心原则,即选择合适的优化器、优化访问表的方式以及共享SQL语句。 首先,Oracle提供了三种优化器:基于规则(RULE)、...
oraclesql优化_Oracle中优化SQL的原则.pdf
在“基于案例学习SQL优化”的课程中,我们主要探讨如何提升数据库性能,特别是针对SQL查询的优化技巧。DBA(数据库管理员)作为关键角色,需要掌握这些技能来确保系统的高效运行。以下是根据课程标题和描述提炼出的...
4. **SQL优化原则**:文本文件可能列出了一系列SQL优化的最佳实践,如遵循“先简单后复杂”的查询设计原则,避免在WHERE子句中使用NULL,合理设置数据库的缓存大小,以及如何利用数据库的EXPLAIN PLAN功能来分析查询...
SQL语句 优化常用原则。 1. 选用适合的ORACLE优化器
具体来说,有几个重要的SQL语句优化原则需要掌握和理解: 1. 判断空值(NULL)与索引的使用。在数据库中,包含NULL值的列不会被索引。因此,在where子句中使用ISNULL或ISNOTNULL条件时,优化器将不会使用索引,而是...
### SQL优化原则和技巧 #### 一、表、索引相关知识及其在数据库内部相关的物理存储 ##### 1. 数据库中最小的物理存储单位:块(Block) - **定义**: 数据库最小的物理存储单位是块,对于Oracle 9i来说,默认大小为8...
### SQL优化的一般原则 1. **选择合适的索引**:索引是提高查询速度的有效手段。合理的索引设计可以显著提高查询效率。例如,在经常用于条件筛选的列上建立索引。 2. **避免全表扫描**:全表扫描会大大增加查询...
首先,我们要明白SQL优化的基本原则:减少查询次数、减小数据量、合理设计索引以及优化查询语句结构。这四个原则贯穿于整个SQL优化过程,是提升查询效率的基础。 1. 减少查询次数:通过联合查询、子查询优化和存储...