
sql优化
文章平均质量分 66
aoerqileng
这个作者很懒,什么都没留下…
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
一个sql优化的案例
在BI的测试过程中,同事在plsql developer中跑存储过程的时候,跑了一天没有结果,开发那边20多分钟就出结果,跟我说了后 ,帮他看了下,下面说下问题处理思路:1是sql本身执行慢还是数据库服务器压力大,竞争太多导致了sql慢2Plsql中的语句不断的循环调用,有很多的sql在执行,该怎么定位问题?首先想到的是上面的2个问题,按照上面的2个问题思路去查原创 2015-04-25 12:03:05 · 989 阅读 · 0 评论 -
mysql sql优化
explain -> select -> a.id,b.shop_id,b.erp_store_id,b.shop_name,a.order_id, -> SUM(a.amount) amount, -> SUM(b.ware_total_price) wareAmount, -> SUM(b.promotion_price)原创 2016-05-10 18:24:29 · 597 阅读 · 0 评论 -
msyql优化案例
同事反馈系统的sql执行的很慢,当时的第一想法是去查看慢日志,然而慢日志中什么也没有,当时在纠结是不是记录慢sql出现了问题,浪费了写时间,然后想到了如果是出现了锁等待,那么sql会一直无法执行,而如果实际执行的时间很短的话,是不会记录到慢日志中的,于是去查看了下锁等待的情况,果然是有等待发生: select * from innodb_lock_waits; +——————-+———————-原创 2016-06-08 17:55:55 · 546 阅读 · 0 评论 -
mysql中联合索引的使用
在oracle,如果存在一个多列的组合索引,比如a,b,c列上存在一个组合索引,那么在查询中如果出现where b=’xx’的情况是可以使用组合索引的,但是mysql是无法使用的,见下面的测试 | big_table | CREATE TABLE big_table ( TABLE_CATALOG varchar(512) NOT NULL DEFAULT ”, TABLE_SCHEM原创 2016-06-16 15:44:12 · 1489 阅读 · 0 评论 -
mysql sql force_index 优化案例
下面的sql运行了27秒 explain SELECT -> COUNT(1) -> FROM -> (SELECT -> t3.store_id -> FROM -> dmall_tmp.wm_order t1 , dmall_oop.store t2, dmall_dw.dm原创 2016-06-17 15:05:10 · 2007 阅读 · 0 评论 -
mysql cpu使用高案例处理
今天得监控总是在报警,cpu使用高,登录到服务器上看了下用户cpu确实挺高,登录到mysql中看了下,没什么高的并发用户,也没有什么慢的sql,拿到一条频繁执行的sql看了下,40多万的记录,全表扫,虽然执行的挺快,但是这种还是挺耗费资源的,就在字段上加了索引,但是这个字段是longtext,只是在前缀上加了索引 create index idx_col on table(col(21));原创 2016-07-14 18:08:40 · 637 阅读 · 0 评论 -
mysql无法优化的sql案例
今天有个开发提sql,需要优化,如下: SELECT count(*) FROM ( SELECT a.vender_id venderId, a.store_id storeId, a.store_name storeName, a.order_id orderId, a.order_type orderType, a.order_time orderTime, a.dmall_原创 2016-07-26 14:51:55 · 537 阅读 · 0 评论 -
oracle latch:row cache object,latch free案例处理
客户的系统在对3000人进行1个月排班的时候,系统执行后一直无法结束。 通过查看等待事件,是在等待latch:row cache object cpu一个核的使用达到100%, 我们可以使用如下SQL检查row cache 是否高效。 pct_succ_gets 接近与100最好,如果接近于0,就说明需要优化。SELECT parameter, SUM(gets),原创 2016-06-21 18:31:05 · 1432 阅读 · 0 评论 -
dbms_xplan.display_cursor使用
在扩完归档空间后,这个sql变慢,通过expain plan for的形式抓取执行计划,但是发现执行计划没有问题。通过重新收集该表得统计信息,在执行这个sql,执行的时间从20分钟 变成 了10秒。用explain plan for来抓取统计信息,跟之前的一样。感觉是第一次通过explain plan for 的形式抓取的不正确,应该通过select * from table(dbms_xplan.原创 2016-06-21 18:41:44 · 2765 阅读 · 0 评论 -
oracle扩展统计信息
SQL> create table t as select mod(rownum,50) as n1,mod(rownum,50) as n2 from dual connect by levelSQL> exec dbms_stats.gather_table_stats(user,'t');SQL> select column_name,histogram from user_ta原创 2015-05-11 20:40:13 · 672 阅读 · 0 评论 -
oracle代价计算公式
oracle包含的2种代价模型:oracle通过隐含参数“_optimizer_cost_model"控制使用哪种代价模型1io代价模型cost=iocost2cpu代价模型cost=iocost+cpucost在代价转换的过程中,所有的代价都转换为单数据块读的单次代价存在四种类型的io,单块读,多块读,直接数据块读和直接数据块写iocost=上述四种io的消耗原创 2015-05-12 18:01:43 · 1966 阅读 · 0 评论 -
oracle-SQL Plan Directive
qqq原创 2016-08-04 15:33:01 · 594 阅读 · 0 评论 -
oracle awr
可以在awr中看到绑定变量的具体值 select plan_table_output from table (dbms_xplan.display_awr(‘ckc0unuavzjrf’,null, null, ‘ADVANCED +PEEKED_BINDS’))原创 2016-08-17 15:19:10 · 496 阅读 · 0 评论 -
oracle sql优化一个案例
原sql SELECT (select t.product_name from td_b_product t where t.product_id=a.product_id ) as product_name, (select t1.area_name from td_m_area t1 where t1.area_code=a.city_code) as area_name F原创 2016-09-09 18:24:18 · 3023 阅读 · 1 评论 -
一个有意思的sql
SQL_ID 117xkgymmyby3, child number 0-------------------------------------MERGE INTO tb_finance_user_fund_statics T1 USING tb_finance_user_fund_statics T2 ON ( T1.account_id=T2.account_id and原创 2017-07-12 10:53:16 · 407 阅读 · 0 评论 -
oracle的cardinality feedback
这个功能也是对优化器评估不准确的补充,在统计信息不正确的情况下,可以使用动态采样,多列的扩展统计信息来解决,cardinality feedback也可以解决这个问题,sql在第一次执行的时候,执行计划是按照正方式产生,如果对于一个游标cardinality feedback监控的功能开启,那么一些cardinality的估计如果跟实际的有很大差异,在下次执行的时候,就会重新优化,使用正确的统计信原创 2016-01-27 20:55:54 · 1461 阅读 · 0 评论 -
oracle谓词推进测试
可合并视图,不可合并视图,谓词推进测试 create table t3 as select * from dba_tables; create table t4 as select * from dba_users; create table t5 as select * from dba_objects;对于没有外连接的测试SQL> select * from (s原创 2015-11-04 16:19:39 · 731 阅读 · 0 评论 -
查找按某列排序后的第n个值
查看每个部门中薪水排第三的人的信息select * from (select e.employee_id, e.first_name, department_id, salary, row_number() over(partition by department_id order by salary de原创 2015-06-15 19:27:39 · 585 阅读 · 0 评论 -
谓词推进的测试
可合并视图,不可合并视图,谓词推进测试 create table t3 as select * from dba_tables; create table t4 as select * from dba_users; create table t5 as select * from dba_objects;对于没有外连接的测试SQL> select * from (s原创 2015-04-29 11:25:01 · 586 阅读 · 0 评论 -
merge join cartesian产生的一种情况
查看绑定变量值dba_hist_sqlbind查看快照历史dba_hist_snapshot查看sql所用的优化器的环境 v$sql_optimizer_env查看工作区的使用情况select * from v$sql_workarea;产生cartesian的一种情况是使用了ordered提示SQL> select /*+ ordered*/原创 2015-05-02 13:23:39 · 795 阅读 · 0 评论 -
create index是否收集统计信息
在oracle10g 后,在create index的时候会收集对象的统计信息,所以compute statistics是为了向后兼容才存在的,在分区的情况下,是否会收集全局的统计信息呢?create table t(n1 number,n2 number) partition by range(n1)( partition p1 values less than (11),partition翻译 2015-05-11 21:00:57 · 956 阅读 · 0 评论 -
oracle执行计划中的cost,time与实际执行时间
SQL> set autotrace traceonlySQL> select * from test;已选择9行。执行计划----------------------------------------------------------Plan hash value: 1357081020-------------------------原创 2015-05-07 10:20:55 · 17222 阅读 · 0 评论 -
oracle11g分区表
1按需创建分区create table f_sales(sales_amt number,d_date date)partition by range (d_date) interval(numtoyminterval(1,'YEAR')) (partition p1 values less than(to_date('01-jan-2010','dd-mon-yyyy')));2原创 2015-06-09 13:53:19 · 832 阅读 · 0 评论 -
直方图对cbo的影响
摘自《基于oracle的sql优化》当某个列上有直方图后,会认为对该目标列施加的等值查询条件是一个不安全的谓词条件,不安全的含义就是相关sql的执行计划会随着对目标列传入值的不同而不同,正常情况下这样是正常的,因为有了直方图,该列本省就是不均衡的了,如果目标sql的执行计划不随谓词条件传入值的不同而不同,则cbo就认为该谓词条件是一个安全的谓词条件。这种不安全的谓词条件有个问题,在curs原创 2015-05-21 20:52:11 · 551 阅读 · 0 评论 -
将文档加载到clob字段
SQL> create directory lob_src as 'D:\walog';目录已创建。SQL> create sequence doc_seq;序列已创建。SQL> create table txt_docs(doc_num number,doc_nm varchar2(100),doc_clb clob,ins_ts timestam原创 2015-06-16 11:36:36 · 657 阅读 · 0 评论 -
绑定变量让sql重新硬解析的方法及11g自适应游标
在系统中有的时候,因为邦迪变量窥探的影响导致了sql走的行计划不好,需要重新窥探下,有2中方法:1在表上执行ddl语句,可以让共享游标失效comment on table t1 is 'for testing '2在10.2.4以上,使用dbms_shared_pool.purge,在10.2.4中使用的时候,需要设置event 5614566alter session set原创 2015-05-30 11:38:58 · 1346 阅读 · 0 评论 -
oracle 并行
并行ddlSQL> create index idx_t3 on t1(object_name,object_id) parallel;索引已创建。SQL> select index_name ,degree from user_indexes where index_name='idx_t3';未选定行SQL> select index_nam原创 2015-05-31 17:36:01 · 604 阅读 · 0 评论 -
直方图的类型
直方图有2中类型,等频与等高。等频就是在收集统计信息的时候,指定的桶数大于唯一值的数量,但是不能超过254个。如果在收集统计信息的时候指定的桶的数量少于唯一值的数量,或唯一值的数量大于254那么就成了等高直方图。下面实验SQL> select id,count(*) from test group by id; ID COUNT(*)---------- --原创 2015-05-22 09:36:27 · 2835 阅读 · 0 评论 -
oracle中的自动统计信息收集
摘自基于orcle的sql优化10g:查看收集的jobSQL> select job_name,program_name,schedule_name,last_start_date from dba_scheduler_jobs where job_name='GATHER_STATS_JOB';JOB_NAME PROGRAM_NAME原创 2015-05-23 08:48:17 · 569 阅读 · 0 评论 -
join,left join and where的测试
SQL> select * from t2; ID NAME---------- ------------- 2 c 3 d e 2 fSQL> select * from t1; ID NAME---------- -------------原创 2015-05-19 11:42:00 · 665 阅读 · 0 评论 -
自己的几个环境的oracle系统统计信息
1在我自己笔记本上,的系统统计信息模拟了些负载,收集系统的统计信息exec dbms_stats.gather_system_stats('start');SQL> select * from sys.aux_stats$; SNAME PNAME PVAL原创 2015-05-23 08:24:33 · 489 阅读 · 0 评论 -
oracle分页
方法1 select object_id,object_name from (select object_id,object_name,row_number() over (order by object_id) r from t3) where r between 10 and 20;OBJECT_ID OBJECT_NAM--------- ----------原创 2015-06-07 11:51:56 · 412 阅读 · 0 评论 -
11g 一个sql案例 hash group by
处理了一个sql导致的告警问题,这个sql本身的写法是有问题的,这个sql有2个执行计划一个好的,一个不好的,好的执行计划是谓词反馈后,确定了正常的结果集,抛出语句的本身问题,看下oracle是怎么搞错的错误的执行计划SQL_ID 9z2dtfxqun0xp, child number 5-------------------------------------select * from (原创 2017-11-27 12:07:23 · 2784 阅读 · 0 评论