简单sql调优问题
2016-08-22 22:16
253 查看
一条简单sql,返回记录是0,但执行却消耗了63s,
![](http://img.blog.csdn.net/20160822221818834?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
执行计划:
![](http://img.blog.csdn.net/20160822221939398?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
表有655518记录
表的索引:
![](http://img.blog.csdn.net/20160822221855787?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
原因分析:
1、高水平问题引起
2、全表扫描的问题,
解决办法:
第一种:收缩表空间
alter table DOM_3_DOCLIB enable row movement; --开始行迁移,因为shrink时rowid会变
alter table DOM_3_DOCLIB shrink space cascade ;
alter table DOM_3_DOCLIB disable row movement; --结束后关闭航迁移
表比较多,直接用SQL语句将要shrink表的命令拼接出来准备好.
执行的时候报:
![](http://img.blog.csdn.net/20160822222026991?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
原因有事务进行,不能获取锁!
第二种:move表,再rebulid索引
最彻底的方法是move,不过索引会失效,需要rebuild.
表的数据跨多个数据文件的话效果不如move彻底。如果没有跨数据文件效果几乎一样。
重建索引如果是很大的表:
有ONLINE选项,对生产的影响也减小了点,但影响是有的,可以找闲时来做
创建索引:
create index IDX03_WDDOC_INFO on DOM_3_DOCLIB (SYS_ISKEEP, SYS_FOLDERID)
tablespace USERS
pctfree 10
initrans 2
maxtrans 255
storage
(
initial 64K
next 1M
minextents 1
maxextents unlimited
);
![](http://img.blog.csdn.net/20160823210129136?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
查看执行计划
![](http://img.blog.csdn.net/20160823210151668?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
收集一下统计信息,然后查看一下空块的数量
![](http://img.blog.csdn.net/20160823210318060?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
执行计划:
表有655518记录
表的索引:
原因分析:
1、高水平问题引起
2、全表扫描的问题,
解决办法:
第一种:收缩表空间
alter table DOM_3_DOCLIB enable row movement; --开始行迁移,因为shrink时rowid会变
alter table DOM_3_DOCLIB shrink space cascade ;
alter table DOM_3_DOCLIB disable row movement; --结束后关闭航迁移
表比较多,直接用SQL语句将要shrink表的命令拼接出来准备好.
执行的时候报:
原因有事务进行,不能获取锁!
第二种:move表,再rebulid索引
最彻底的方法是move,不过索引会失效,需要rebuild.
表的数据跨多个数据文件的话效果不如move彻底。如果没有跨数据文件效果几乎一样。
重建索引如果是很大的表:
有ONLINE选项,对生产的影响也减小了点,但影响是有的,可以找闲时来做
创建索引:
create index IDX03_WDDOC_INFO on DOM_3_DOCLIB (SYS_ISKEEP, SYS_FOLDERID)
tablespace USERS
pctfree 10
initrans 2
maxtrans 255
storage
(
initial 64K
next 1M
minextents 1
maxextents unlimited
);
查看执行计划
收集一下统计信息,然后查看一下空块的数量
相关文章推荐
- 查询mysql中第二大的记录
- JSP中的分页技术源码(MYSQL数据库)
- Excel 、数据库 一言不合就转换
- Excel 、数据库 一言不合就转换
- Anroid——数据库SQLite——SQLiteOpenHelper+SQLiteDatabase
- mysql表内关联
- Mysql InnoDB锁
- mongodb 增、删、改、查
- SQL基础之数据库
- 继外存储和SD卡存储,内存储还有一个方法SQLite
- Activt工作流数据库对应表的作用
- 各种主流 SQLServer 迁移到 MySQL 工具对比
- SQL SERVER中的一些安全措施
- 视图与数据库完整性约束
- 数据库安全功能
- sqlmap注入总结
- 数据库安全隐患与数据库类型
- mysql中索引
- oracle12创建用户错误ORA-65096: 公用用户名或角色名无效 invalid common user or role name
- Oracle 数据库之表的简单操作(一)