- 浏览: 88213 次
- 性别:
- 来自: 上海
文章分类
- 全部博客 (99)
- JAVA (11)
- oracle (11)
- Hibernate (10)
- Utils (7)
- Struts (6)
- SQL (6)
- spring (6)
- Jquery (9)
- Exception (3)
- tomcat (3)
- SVN (1)
- Ajax (2)
- DOS (1)
- windows (1)
- Interview (1)
- Url (2)
- Jstl (1)
- Junit (1)
- PDI (1)
- JSR303 (0)
- BlogUrl (1)
- Maven (2)
- Date Plugin (0)
- Camera (1)
- 笔记 (1)
- doubleball (1)
- CSS (1)
- SSH (1)
- Mybatis (1)
- spring security (0)
- 参考书 (1)
- 在线软件 (1)
- VMware (1)
最新评论
在使用左,右,或者内连接的时候,在需要使用排序的时候,不妨先以一个表为标准,先进行排序,这样可以提供语句的性能
比如:
优化前:
SELECT *
FROM (SELECT a.*, ROW_NUMBER() OVER(ORDER BY createDate desc) row_num
FROM (SELECT a.ID as id,
a.CODE as code,
a.LAST_STORE_JOB_ID as lastStoreJobId,
a.JOB_DATE as jobDate,
a.JOB_STORE_ID as jobStoreId,
c.NAME as jobStoreName,
a.TRANSFER_STORE_ID as transferStoreId,
d.NAME as transferStoreName,
a.STORE_COMPANY_ID as storeCompanyId,
e.COMPANY_FULLNAME as companyName,
a.EXTRACT_COMPANY_ID as extractCompanyId,
f.COMPANY_FULLNAME as extractCompanyName,
a.SOURCE_TYPE as sourceType,
a.EXTERNAL_CODE as externalCode,
a.REMARK as remark,
a.ALLOT_TYPE as allotType,
a.ALLOT_STATUS as allotStatus,
a.STATUS as status,
a.PDA_STATUS as pdaStatus,
a.JOB_TYPE_ID as jobTypeId,
a.ACTION_TYPE_ID as actionTypeId,
a.SOLVE_STATUS as solveStatus,
a.UPDATE_DATE as updateDate,
a.CREATE_DATE as createDate,
a.VEHICLE_CODE as vehicleCode,
a.USER_ID as userId,
g.USER_NAME as userName,
a.FLOW_STATUS as flowStatus,
a.TARGET_ALLOCATION_ID as targetAllocationId,
h.NAME as allocationName,
(select count(*)
FROM STORE_JOB_FLOW_NODES i
left join STORE_JOB_FLOW_MODES j
on j.id = i.JOB_FLOW_MODE_ID
and i.ACTION_TYPE_ID = 'HWMAN02'
left join STORE_JOB_FLOWS k
on k.job_flow_mode_id = j.id
where k.STORE_JOB_ID = a.ID) as nextIsPlan
FROM STORE_JOBS a LEFT JOIN STORE_JOBS b
on a.last_store_job_id = b.id
LEFT JOIN STORES c
on a.job_store_id = c.id
LEFT JOIN STORES d
on a.transfer_store_id = d.id
LEFT JOIN COMPANYS e
on a.store_company_id = e.id
LEFT JOIN COMPANYS f
on a.extract_company_id = f.id
LEFT JOIN USERS g
on a.user_id = g.id
LEFT JOIN ALLOCATIONS h
on a.target_allocation_id = h.id
where 1 = 1
AND a.ACTION_TYPE_ID = 'HWMAN01'
AND a.JOB_DATE between
to_date('2014-07-02 00:00:00', 'yyyy-mm-dd hh24:mi:ss') and
to_date('2014-08-02 23:59:59', 'yyyy-mm-dd hh24:mi:ss')
AND a.JOB_TYPE_ID = 'HWMSN02'
order by a.CREATE_DATE desc ) a
)
WHERE row_num BETWEEN 1 AND 30
ORDER BY createDate desc
优化后:
SELECT *
FROM (SELECT a.*, ROW_NUMBER() OVER(ORDER BY createDate desc) row_num
FROM (SELECT a.ID as id,
a.CODE as code,
a.LAST_STORE_JOB_ID as lastStoreJobId,
a.JOB_DATE as jobDate,
a.JOB_STORE_ID as jobStoreId,
c.NAME as jobStoreName,
a.TRANSFER_STORE_ID as transferStoreId,
d.NAME as transferStoreName,
a.STORE_COMPANY_ID as storeCompanyId,
e.COMPANY_FULLNAME as companyName,
a.EXTRACT_COMPANY_ID as extractCompanyId,
f.COMPANY_FULLNAME as extractCompanyName,
a.SOURCE_TYPE as sourceType,
a.EXTERNAL_CODE as externalCode,
a.REMARK as remark,
a.ALLOT_TYPE as allotType,
a.ALLOT_STATUS as allotStatus,
a.STATUS as status,
a.PDA_STATUS as pdaStatus,
a.JOB_TYPE_ID as jobTypeId,
a.ACTION_TYPE_ID as actionTypeId,
a.SOLVE_STATUS as solveStatus,
a.UPDATE_DATE as updateDate,
a.CREATE_DATE as createDate,
a.VEHICLE_CODE as vehicleCode,
a.USER_ID as userId,
g.USER_NAME as userName,
a.FLOW_STATUS as flowStatus,
a.TARGET_ALLOCATION_ID as targetAllocationId,
h.NAME as allocationName,
(select count(*)
FROM STORE_JOB_FLOW_NODES i
left join STORE_JOB_FLOW_MODES j
on j.id = i.JOB_FLOW_MODE_ID
and i.ACTION_TYPE_ID = 'HWMAN02'
left join STORE_JOB_FLOWS k
on k.job_flow_mode_id = j.id
where k.STORE_JOB_ID = a.ID) as nextIsPlan
FROM (SELECT * FROM STORE_JOBS order by CREATE_DATE desc) a LEFT JOIN STORE_JOBS b
on a.last_store_job_id = b.id
LEFT JOIN STORES c
on a.job_store_id = c.id
LEFT JOIN STORES d
on a.transfer_store_id = d.id
LEFT JOIN COMPANYS e
on a.store_company_id = e.id
LEFT JOIN COMPANYS f
on a.extract_company_id = f.id
LEFT JOIN USERS g
on a.user_id = g.id
LEFT JOIN ALLOCATIONS h
on a.target_allocation_id = h.id
where 1 = 1
AND a.ACTION_TYPE_ID = 'HWMAN01'
AND a.JOB_DATE between
to_date('2014-07-02 00:00:00', 'yyyy-mm-dd hh24:mi:ss') and
to_date('2014-08-02 23:59:59', 'yyyy-mm-dd hh24:mi:ss')
AND a.JOB_TYPE_ID = 'HWMSN02') a)
WHERE row_num BETWEEN 1 AND 30
ORDER BY createDate desc
比如:
优化前:
SELECT *
FROM (SELECT a.*, ROW_NUMBER() OVER(ORDER BY createDate desc) row_num
FROM (SELECT a.ID as id,
a.CODE as code,
a.LAST_STORE_JOB_ID as lastStoreJobId,
a.JOB_DATE as jobDate,
a.JOB_STORE_ID as jobStoreId,
c.NAME as jobStoreName,
a.TRANSFER_STORE_ID as transferStoreId,
d.NAME as transferStoreName,
a.STORE_COMPANY_ID as storeCompanyId,
e.COMPANY_FULLNAME as companyName,
a.EXTRACT_COMPANY_ID as extractCompanyId,
f.COMPANY_FULLNAME as extractCompanyName,
a.SOURCE_TYPE as sourceType,
a.EXTERNAL_CODE as externalCode,
a.REMARK as remark,
a.ALLOT_TYPE as allotType,
a.ALLOT_STATUS as allotStatus,
a.STATUS as status,
a.PDA_STATUS as pdaStatus,
a.JOB_TYPE_ID as jobTypeId,
a.ACTION_TYPE_ID as actionTypeId,
a.SOLVE_STATUS as solveStatus,
a.UPDATE_DATE as updateDate,
a.CREATE_DATE as createDate,
a.VEHICLE_CODE as vehicleCode,
a.USER_ID as userId,
g.USER_NAME as userName,
a.FLOW_STATUS as flowStatus,
a.TARGET_ALLOCATION_ID as targetAllocationId,
h.NAME as allocationName,
(select count(*)
FROM STORE_JOB_FLOW_NODES i
left join STORE_JOB_FLOW_MODES j
on j.id = i.JOB_FLOW_MODE_ID
and i.ACTION_TYPE_ID = 'HWMAN02'
left join STORE_JOB_FLOWS k
on k.job_flow_mode_id = j.id
where k.STORE_JOB_ID = a.ID) as nextIsPlan
FROM STORE_JOBS a LEFT JOIN STORE_JOBS b
on a.last_store_job_id = b.id
LEFT JOIN STORES c
on a.job_store_id = c.id
LEFT JOIN STORES d
on a.transfer_store_id = d.id
LEFT JOIN COMPANYS e
on a.store_company_id = e.id
LEFT JOIN COMPANYS f
on a.extract_company_id = f.id
LEFT JOIN USERS g
on a.user_id = g.id
LEFT JOIN ALLOCATIONS h
on a.target_allocation_id = h.id
where 1 = 1
AND a.ACTION_TYPE_ID = 'HWMAN01'
AND a.JOB_DATE between
to_date('2014-07-02 00:00:00', 'yyyy-mm-dd hh24:mi:ss') and
to_date('2014-08-02 23:59:59', 'yyyy-mm-dd hh24:mi:ss')
AND a.JOB_TYPE_ID = 'HWMSN02'
order by a.CREATE_DATE desc ) a
)
WHERE row_num BETWEEN 1 AND 30
ORDER BY createDate desc
优化后:
SELECT *
FROM (SELECT a.*, ROW_NUMBER() OVER(ORDER BY createDate desc) row_num
FROM (SELECT a.ID as id,
a.CODE as code,
a.LAST_STORE_JOB_ID as lastStoreJobId,
a.JOB_DATE as jobDate,
a.JOB_STORE_ID as jobStoreId,
c.NAME as jobStoreName,
a.TRANSFER_STORE_ID as transferStoreId,
d.NAME as transferStoreName,
a.STORE_COMPANY_ID as storeCompanyId,
e.COMPANY_FULLNAME as companyName,
a.EXTRACT_COMPANY_ID as extractCompanyId,
f.COMPANY_FULLNAME as extractCompanyName,
a.SOURCE_TYPE as sourceType,
a.EXTERNAL_CODE as externalCode,
a.REMARK as remark,
a.ALLOT_TYPE as allotType,
a.ALLOT_STATUS as allotStatus,
a.STATUS as status,
a.PDA_STATUS as pdaStatus,
a.JOB_TYPE_ID as jobTypeId,
a.ACTION_TYPE_ID as actionTypeId,
a.SOLVE_STATUS as solveStatus,
a.UPDATE_DATE as updateDate,
a.CREATE_DATE as createDate,
a.VEHICLE_CODE as vehicleCode,
a.USER_ID as userId,
g.USER_NAME as userName,
a.FLOW_STATUS as flowStatus,
a.TARGET_ALLOCATION_ID as targetAllocationId,
h.NAME as allocationName,
(select count(*)
FROM STORE_JOB_FLOW_NODES i
left join STORE_JOB_FLOW_MODES j
on j.id = i.JOB_FLOW_MODE_ID
and i.ACTION_TYPE_ID = 'HWMAN02'
left join STORE_JOB_FLOWS k
on k.job_flow_mode_id = j.id
where k.STORE_JOB_ID = a.ID) as nextIsPlan
FROM (SELECT * FROM STORE_JOBS order by CREATE_DATE desc) a LEFT JOIN STORE_JOBS b
on a.last_store_job_id = b.id
LEFT JOIN STORES c
on a.job_store_id = c.id
LEFT JOIN STORES d
on a.transfer_store_id = d.id
LEFT JOIN COMPANYS e
on a.store_company_id = e.id
LEFT JOIN COMPANYS f
on a.extract_company_id = f.id
LEFT JOIN USERS g
on a.user_id = g.id
LEFT JOIN ALLOCATIONS h
on a.target_allocation_id = h.id
where 1 = 1
AND a.ACTION_TYPE_ID = 'HWMAN01'
AND a.JOB_DATE between
to_date('2014-07-02 00:00:00', 'yyyy-mm-dd hh24:mi:ss') and
to_date('2014-08-02 23:59:59', 'yyyy-mm-dd hh24:mi:ss')
AND a.JOB_TYPE_ID = 'HWMSN02') a)
WHERE row_num BETWEEN 1 AND 30
ORDER BY createDate desc
发表评论
-
如果没有就Insert,如果有就根据唯一索引更新
2015-05-18 10:25 3771.建立表结构 CREATE TABLE Test_Table ... -
oracle sql 指定记录 作为第一条
2015-02-10 17:43 5271)查询语句 select id,rank fro ... -
Oracle exists 用法 和 My Sql limit offset的用法
2015-02-03 10:34 756Oracle: 1.先执行子查询,再执行主查询。在执行子 ... -
树性结构实例
2015-02-02 10:29 752建表: create table address( ... -
Sql行列转换
2015-01-30 17:03 585name subject ... -
存储过程(二)案例
2015-01-22 15:42 562(1) Create or Replace Packag ... -
存储过程(一)游标
2015-01-22 14:25 6371. 概念 游标(Cursor)它使户可逐行访问由S ... -
数据库解锁
2014-12-24 17:12 469(1)查出锁定的Sesson_id select ses ... -
Oracel function instance
2014-09-01 15:39 6031 if end if语句的function实例 crea ... -
游标实例
2014-08-19 10:41 459PL/SQL 会为程序中执行的每一条UPDATE,DELETE ... -
树形结构查询
2014-07-29 19:24 646select id, name from (select ... -
left join
2014-06-30 15:05 463--- 库存结存查询记录数,总数量和总重量Sql: selec ... -
ORA-28000: ORACLE账户锁定的解决办法
2014-04-04 11:35 2272ORA-28000: ORACLE账户锁定的解决办法 ORA- ... -
MySQL、SqlServer、Oracle三大主流数据库分页查询
2014-03-06 21:33 475MySQL、SqlServer、Oracle三大主流数据库分页 ... -
sql经典语句
2014-02-21 11:16 400查询某张表中某些列一 ...
相关推荐
SQL百万级数据库优化大全,是对sql各方面优化的总结和案例引导,避免全表扫描等方面的性能优化。
本书及其续篇——《Microsoft SQL Server 2005技术内幕:T-SQL程序设计》介绍了SQL Server 2005中高级T-SQL查询、查询优化及编程相关的知识。这两本书侧重于解决实践中的常见问题,并讨论了解决这些问题的方法。它们...
sql学习 索引特性之有序优化order by.sql
任何在Order by语句的非索引项或者有计算表达式都将降低查询速度。 仔细检查order by语句以找出非索引项或者表达式,它们会降低性能。解决这个问题的办法就是重写order by语句以使用索引,也可以为所使用的列建立...
优化sql的数据。 select * from (select PI.ID AS ProductID,PI.SynapsID,PI.NameCode,PI.Name_cn,PI.Name_en,PP.PicName,PI.BarCode, PI.NewLevel,PI.`Status`,PI.HighPrice,CPM.SalesPlaceID, psi.WIID,psi....
预计时间2小时,每小时一个课程段(子查询是SQL查询优化的重点内容,务必掌握好) 第5课 查询优化技术理论与MySQL实践(三)------视图重写与等价谓词重写 什么是视图重写?哪些类型的视图可以被优化?MySQL是怎么...
SQL/SqlParameter特殊字符过滤/优化查询排序/异常记录row_number()over(order by {1})as row 排序 not in 排序 SQL查询、更新、插入、分页排序,存储过程调用
对大量数据SQL查询的优化心得:1、对查询进行优化,应尽量避免全表扫描,首先应考虑在 where 及 order by 涉及的列上建立索引;2、应尽量避免在 where 子句中对字段进行 null 值判断,否则将导致引擎放弃使用索引而...
order by 后跟的字段尽量是索引字段,如果这个字段不是索引字段可以考虑时候可以给这个排序字段加上索引 使用存储过程优化 复杂的业务逻辑可以使用存储过程来实现 优点: 减少网络流量--将多种操作放在一个过程...
在这篇文章中,笔者就谈谈提高Order By语句查询效率的两个思路,以供大家参考。 在MySQL数据库中,Order by语句的使用频率是比较高的。但是众所周知,在使用这个语句时,往往会降低数据查询的性能。因为可能需要对...
order by, group by,distinct … 都是消耗 CPU 的大户(这些操作基本上都是 CPU 处理内存中的数据比较运算)。当我们的 IO 优化做到一定阶段之后,降低 CPU 计算也就成为了我们 SQL 优化的重要目标
所以我们会写如下的SQL语句: select top 100 * from 表 order by Score desc 如果表非常大的话,那么这样的操作是非常消耗资源的,因为SQL SERVER要对整个表进行排序,然后取前N条记录.这样的造作是在Temdb
在优化这个语句之前,我们先了解下SQL查询的基本执行过程: 1.应用通过MySQL API把查询命令发送给MySQL服务器,然后被解析 2.检查权限、MySQL optimizer进行优化,经过解析和优化后的查询命令被编译为CPU可运行的二...
《Microsoft SQL Server 2008技术内幕:T-SQL查询》全面深入地介绍了Microsoft SQL Server 2008中高级T-SQL查询、性能优化等方面的内容,以及SQL Server 2008新增加的一些特性。主要内容包括SQL的基础理论、查询优化...
当查询语句的 order BY 条件和查询的执行计划中所利用的 Index 的索引键(或前面几个索引键)完全一致,且索引访问方式为 rang,ref 或者 index 的时候,MySQL 可以利用索引顺序而直接取得已经排好序的数据。...
1.对查询进行优化,应尽量避免全表扫描,首先应考虑在 where 及 order by 涉及的列上建立索引。 2.应尽量避免在 where 子句中对字段进行 null 值判断,否则将导致引擎放弃使用索引而进行全表扫描,如:select id ...
4、当你的程序和数据库结构/SQL语句已经优化到无法优化的程度,而程序瓶颈并不能顺利解决,那就是应该考虑使用诸如memcached这样的分布式缓存系统的时候了。 5、习惯和强迫自己用EXPLAIN来分析你SQL语句的性能。 一...
文章目录测试数据1 sql执行顺序2 order by 和 group by什么时候会出现Using filesort — 理论3 order by 和 group by什么时候会出现Using filesort — 实践3.1 不会出现 Using filesort的情况 — 符合最佳左前缀法则...
1. 对查询进行优化,尽量避免全表扫描,首先应考虑在 where 及 order by 涉及的列上建立索引。 在优化查询时,避免全表扫描是非常重要的。全表扫描会使查询速度变得很慢,因为它需要遍历整个表。通过建立索引,可以...
创建表&创建索引 create table tbl1 ( id int unique, sname varchar(50), index tbl1_index_sname(sname desc...通过索引优化来实现MySQL的ORDER BY语句优化: 1、ORDER BY的索引优化 如果一个SQL语句形如: SELECT