易截截图软件、单文件、免安装、纯绿色、仅160KB
热门标签: c c# c++ asp asp.net linux php jsp java vb Python Ruby mysql sql access Sqlite sqlserver delphi javascript Oracle ajax wap mssql html css flash flex dreamweaver xml
 最新文章 : sql

Oracle Sql 语句性能调优

这篇文章是玄机逸士为某上市公司的ERP系统调优所撰写报告的部分摘录,希望能够对大家有所帮助:
下面给出SQL优化经常遇到的情形。它们是在很多人长期积累的经验上总结出来的,这些都是一些一般性的结论,在实际工作中,还应当具体情况具体分析,并加以灵活运用。
(1)  用NOT EXISTS替换NOT IN 将更显著地提高效率,尽量用NOT EXISTS替代NOT IN。在子查询中,NOT IN子句将执行一个内部的排序和合并. 无论在哪种情况下,NOT IN都是最低效的 (因为它对子查询中的表执行了一个全表遍历). 为了避免使用NOT IN,我们可以把它改写成外连接(Outer Joins)或NOT EXISTS。
例如,
SELECT ENMAE
from EMP
WHERE DEPTNO NOT IN
(
SELECT DEPTNO
from DEPT
WHERE LOC='BOSTON'
);
为了提高效率,可改写为,
(方法一:高效)
SELECT ENAME
from EMP A,DEPT B
WHERE A.DEPTNO = B.DEPTNO(+)
AND B.DEPTNO IS NULL
AND B.LOC(+) = 'BOSTON'
(方法二:最高效)
SELECT ENAME
from EMP E
WHERE NOT EXISTS
( SELECT 'X' from DEPT D WHERE
D.DEPTNO = E.DEPTNO AND LOC='BOSTON'
);
除此之外,推荐使用NOT EXISTS的一个重要的原因是NOT EXISTS在当子查询可能返回NUL ......

Oracle Sql 语句性能调优

这篇文章是玄机逸士为某上市公司的ERP系统调优所撰写报告的部分摘录,希望能够对大家有所帮助:
下面给出SQL优化经常遇到的情形。它们是在很多人长期积累的经验上总结出来的,这些都是一些一般性的结论,在实际工作中,还应当具体情况具体分析,并加以灵活运用。
(1)  用NOT EXISTS替换NOT IN 将更显著地提高效率,尽量用NOT EXISTS替代NOT IN。在子查询中,NOT IN子句将执行一个内部的排序和合并. 无论在哪种情况下,NOT IN都是最低效的 (因为它对子查询中的表执行了一个全表遍历). 为了避免使用NOT IN,我们可以把它改写成外连接(Outer Joins)或NOT EXISTS。
例如,
SELECT ENMAE
from EMP
WHERE DEPTNO NOT IN
(
SELECT DEPTNO
from DEPT
WHERE LOC='BOSTON'
);
为了提高效率,可改写为,
(方法一:高效)
SELECT ENAME
from EMP A,DEPT B
WHERE A.DEPTNO = B.DEPTNO(+)
AND B.DEPTNO IS NULL
AND B.LOC(+) = 'BOSTON'
(方法二:最高效)
SELECT ENAME
from EMP E
WHERE NOT EXISTS
( SELECT 'X' from DEPT D WHERE
D.DEPTNO = E.DEPTNO AND LOC='BOSTON'
);
除此之外,推荐使用NOT EXISTS的一个重要的原因是NOT EXISTS在当子查询可能返回NUL ......

sql语句优化

操作符优化
IN 操作符
用IN写出来的SQL的优点是比较容易写及清晰易懂,这比较适合现代软件开发的风格。
但是用IN的SQL性能总是比较低的:
    数据库试图将其转换成多个表的连接,如果转换不成功则先执行IN里面的子查询,再查询外层的表记录,如果转换成功则直接采用多个表的连接方式查询。由此可见用IN的SQL至少多了一个转换的过程。一般的SQL都可以转换成功,但对于含有分组统计等方面的SQL就不能转换了。
    推荐方案:在业务密集的SQL当中尽量不采用IN操作符。
NOT IN操作符
    此操作是强列推荐不使用的,因为它不能应用表的索引。
    推荐方案:用NOT EXISTS 或(外连接+判断为空)方案代替
<> 操作符(不等于)
    不等于操作符是永远不会用到索引的,因此对它的处理只会产生全表扫描。
推荐方案:用其它相同功能的操作运算代替,如
    a<>0 改为 a>0 or a<0
    a<>’’ 改为 a>’’
IS NULL 或IS NOT NULL操作(判断字段是否为空)
    判断字段是否 ......

set autotrace in SQL*Plus

set autotrace off  
set autotrace on  
set autotrace traceonly  
 
set autotrace on explain  
set autotrace on statistics  
set autotrace on explain statistics  
 
set autotrace traceonly explain  
set autotrace traceonly statistics  
set autotrace traceonly explain statistics  
 
set autotrace off explain  
set autotrace off statistics  
set autotrace off explain statistics 
set autotrace off
set autotrace on
set autotrace traceonly
set autotrace on explain
set autotrace on statistics
set autotrace on explain statistics
set autotrace traceonly explain
set autotrace traceonly statistics
set autotrace traceonly explain statistics
set autotrace off explain
set autotrace off statistics
set autotrace off explain statistics
 
设置autotrace允许显示DML语句的一些统计信息和/或查询计划。
set autotrace on: 为语句显示统计 ......

sql 分页技术

分页语句
sqlserver 方案1: select top 10 * from t where id not in(select top 30 id from t order by id) order by id
方案2: select top 10 * from t where id in (select top 40 id from t order by id)oder by id desc
mysql: select * from t order by id limit 30,10
oracle: select * from (select rownum r * from t where r<=40)where r>30
分页技术:
mysql: sql ="select * from articles limit" +(pageNo-1)*pageSize + "," +pageSize;
 oracle: sql="select * from " + "(select rownum r,* from" +"(select * from articles order by posttime desc)" + "where rownum <= " +pageNo *pageSize")tmp" + "where r>" +(pageNo-1)*pageSize";
sqlserver:sql = "select top 10 * from id not id(select top " + (pageNo-1)*pageSize + "id from articles)"
 DataSource ds = new InitialContext().lookup(jndiurl); Connection cn = ds.getConnection(); //"select * from user where id=?" --->binary directive PreparedStatement pstmt = cn.prepareSatement(sql); ResultSet rs = pstmt.executeQuery() while(rs.nex ......

SQL练习

father表   son表    
fid fname   sid sname fid height money
1 a   100 s1 1 1.7 7000
2 b   101 s2 2 1.6 8000
3 c   102 s3 2 1.8 9000s
create table father(
fid number primary key,
fname varchar(10)
);
create table son(
sid number primary key,
sname varchar(10),
fid number,
height number,
money number
);
select t.*, t.rowid from father t;
select t.*, t.rowid from son t;
1、查询sid、sname、fid  
select sid,sname,fid from son;
     
2、查询各儿子涨价20%以后的新学费,注意,8000块以下的不涨价。
select money*1.2 as new_money from son where money>=8000
union all
select money from son where money<8000;
select '涨了' as 涨价情况,money*1.2 as new_money from son where money>=8000
union all
select '没涨',money from son where money<8000; ......

SQL 中文转拼音


--函数如下:
/*
CREATE FUNCTION dbo.fnpbGetPYFirstLetter 

@str NVARCHAR(4000) 

RETURNS NVARCHAR(4000) 
--WITH ENCRYPTION 
AS 
BEGIN 
DECLARE @WORD NCHAR(1),@PY NVARCHAR(4000)
SET @PY=''
WHILE LEN(@STR)>0 
BEGIN 
SET @WORD=LEFT(@STR,1)
--如果非汉字字符,返回原字符 
SET @PY=@PY+(CASE WHEN UNICODE(@WORD) BETWEEN 19968 AND 19968+20901 
THEN ( 
SELECT TOP 1 PY 
from 

SELECT 'A' AS PY,N'驁' AS WORD 
UNION ALL SELECT 'B',N'簿' 
UNION ALL SELECT 'C',N'錯' 
UNION ALL SELECT 'D',N'鵽' 
UNION ALL SELECT 'E',N'樲' 
UNION ALL SELECT 'F',N'鰒' 
UNION ALL SELECT 'G',N'腂' 
UNION ALL SELECT 'H',N'夻' 
UNION ALL SELECT 'J',N'攈' 
UNION ALL SELECT 'K',N'穒' 
UNION ALL SELECT 'L',N'鱳' 
UNION ALL SELECT 'M',N'旀' 
UNION ALL SELECT 'N',N'桛' 
UN ......
总记录数:4346; 总页数:725; 每页6 条; 首页 上一页 [664] [665] [666] [667] 668 [669] [670] [671] [672] [673]  下一页 尾页
© 2009 ej38.com All Rights Reserved. 关于E健网联系我们 | 站点地图 | 赣ICP备09004571号