{转}SQL优化34 条建议
(1) 选择最有效率的表名顺序
(
只在基于规则的优化器中有效
)
:
ORACLE 的解析器按照从右到左的顺序处理
from
子句
中的表名,
from
子句中写在最后的表
(
基础表
driving table)
将被最先处理,在
from
子句中包含多个表的情况下
,
你必须选
择记录条数最少的表作为基础表。如果有
3
个以上的表连接查询
,
那就需要选择交叉表
(intersection table)
作为基础表
,
交叉表是指那个被其他表所引用的表
.
(2) WHERE子句中的连接顺序:
ORACLE采用自下而上的顺序解析
WHERE
子句
,
根据这个原
理
,
表之间的连接必须写在其他
WHERE
条件之前
,
那些可以
过滤掉最大数量记录的条件必须写在
WHERE
子句的末尾
.
(3) SELECT子句中避免使用
‘
*
‘
:
ORACLE在
解析的过程中
,
会将
'*'
依次转换成所有的列名
,
这个工作是通过查询数据字典完成的
,
这意味
着将耗费更多的时间
(4) 减少访问数
据库的次数:
ORACLE在
内部执行了许多工作
:
解析
SQL
语句
,
估算索引的利用率
,
绑定变量
,
读数据块
等;
(5) 在
SQL*Plus , SQL*Forms
和
Pro*C
中重新设置
ARRAYSIZE
参数
,
可以增加每次数据库访问的检索数据量
,
建议值为
200
(6) 使用
DECODE
函数来减少处理时间:
使用DECODE
函
数可以避免重复扫描相同记录或重复连接相同的表
.
(7) 整合简单
,
无关联的数据库访问:
如果你有几个简单的数据
库查询语句,
你可以把它们整合到一个查询中
(
即使它们之间没有关系
)
(8) 删除重复记
录:
最高效的删除重复记录方法 (
因为使用了
ROWID)
例子:
DELETE from EMP E WHERE E.ROWID > (SELECT MIN(X.ROWID)
from EMP X WHERE X.EMP_NO = E.EMP_NO);
(9) 用
TRUNCATE
替代
DELETE
:
当删除表中的记录时,
在通常情况
下
,
回滚段
(rollback segments )
用来存放可以被恢复的信息
.
如果你
相关文档:
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;
import org.hibernate.HibernateException;
import org.hibernate.Session;
import org.springframework.orm.hibernate3.Hibernat ......
1:replace 函数
第一个参数你的字符串,第二个参数你想替换的部分,第三个参数你要替换成什么
select replace('lihan','a','b')
&nb ......
我们在开发过程中,经常遇到这样问题,就是要求定期进行数据库的检查,如果发现特定数据,那么就要进行某项操作,这个需求呢,可以利用Windows的计划任务,定期执行某一个应用程序,去检索数据;也可以让程序自己控制。其实SQL Server自己也可以创建计划任务,定期进行执行。如果数据库服务器允许,可以考虑采用这种方式。
......
贺州市疾病预防控制中心所用的ZmSoft从业体检信息网络系统V2010.1.26 正式版采用SQL SERVER2000平台,不明原因,数据库"置疑“,客户试过所有网上方法,未能解决.沈阳凯文数据恢复中心SQL数据库工程师成功将其解决.
沈阳凯文数据恢复中心MS SQL SERVER研发小组致力于MsSql数据库技术的研究。经过多年研究完全掌握了S ......
JOIN优化
MySQL中join的实现采用的是Nested Loop Join算法。通过驱动表的结果集作为循环基础数据,然后将该结果集中的数据作为过滤
条件一条条的到下一个表中查询数据,最后合并结果,如果存在后续表,过程也如此。
尽量减少join语句中nested loop循环的次数。最有效的方法是让驱动表的结果集尽可能的小
优先优化nested ......