日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 >

sql优化点整理

發布時間:2025/7/14 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 sql优化点整理 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
sql優化點整理 此文是我最早開始sql優化至今整理的小知識點和經常遇到的問題,弄懂這些對優化大型的sql會有不少幫助 ---------------------------------使用了多余的外連接------------------------------------------------- 使用多余的外連接 外連接是一個代價非常昂貴的執行過程。如果業務需要,這種操作是必要的,但是有時 候會出現人為的在SQL 中使用不必要的外連接,這實際上是因為有的開發人員擔心遺漏一 些數據而刻意使用它,這就非常有可能留下隱患,讓數據庫選擇昂貴的執行計劃而不是最優 的那一個。 SQL> select * from t1; A B ---------- ---------- 1 101 2 102 3 103 4 104 5 105 6 106 7 107 8 108 9 109 已選擇9 行。 SQL> select * from t2; C D ---------- ---------- 1001 2 1002 1003 4 1004 1005 6 1006 1007 8 1008 1009 已選擇9 行。 通過下面這條語句,通過使用A 字段和T2 表C 字段關聯,我們獲取了T1 表上所有的 行以及T2 表上符合條件的行: SQL> select a,b,c,d from t1,t2 where t1.a=t2.c(+) ; A B C D ---------- ---------- ---------- ---------- 2 102 2 1002 4 104 4 1004 6 106 6 1006 8 108 8 1008 1 101 3 103 5 105 7 107 9 109 SQL> select a,b,c,d from t1,t2 where t1.a=t2.c(+) and t2.d>1000; A B C D ---------- --------- ? ---------- ---------- 2 102 2 1002 4 104 4 1004 6 106 6 1006 8 108 8 1008 這條SQL 的意思是告訴數據庫,我要得到T1 表上所有的行,并且用A 列和T2 表C 做關聯,同時要求T2 表C 列的值大于1000. 讓我們再看看另一條結果集完全一樣的SQL: SQL> select a,b,c,d from t1,t2 where t1.a=t2.c and t2.d>1000; A B C D ---------- ---------- ---------- ---------- 2 102 2 1002 4 104 4 1004 6 106 6 1006 8 108 8 1008 從結果集上來看,這是兩條等價的SQL 語句,就是說,在這種情況下,外連接其實是 沒有用的,是人為的在SQL 里設定的限制!如果仔細看一下第一條語句,我們不難發現, 條件中T2.C>1000 已經明確的指出,在結果集中,T2 表在任何一行,C 列都應該有值的, 也就是在這種情況下,根本就不需要使用外連接,業務邏輯上講,外連接在這里是多余的。 這種情況在開發人員的代碼中有時候會遇到,對他們來講,只要保證結果集正確就好,但對 數據庫來講,在執行時可能會引起極大的性能差別。 ---------------------------------all_rows / first_rows------------------------------------------------- 對于OLAP 系統,絕大多少時候數據庫上運行著的是報表作業,執行基本上是聚合類的SQL 操作,比如GROUP BY,這時候,把優化器模式設置成all_rows 是恰當的。 而對于一些分頁操作比較多的網站類數據庫,設置成first_rows 會更好一些。 在SQL 里通過Hints 的方式來將優化模式轉換成FIRST_ROWS? 比如這樣的一個每次取出10 條記錄的分頁查詢: Select * from (SELECT /*+ first_rows(10) */ a.*,rownum rnum from (SELECT /*+ first_rows(10) */ id,name from t1 order by id) a Where rownum<=10) Where rnum>=1; alter session set optimizer_mode=all_rows; alter session set optimizer_mode=first_rows; ---------------------------------join與left join------------------------------------------------- 當兩表關聯時,如a left join b,然后在b上有where條件,那么可去掉left。 不去掉left,會產生不必要的關聯,嚴重的是,a left join b,一般會選擇a表為驅動表, 這是為防止結果錯誤(當然優化器有可能看到where有b的條件去掉left) 無where時: SQL> select * from t1 2 ?left join t2 3 ?on t1.a=t2.a 4 ?; A ? ? ? ? ?B ? ? ? ? ?A ? ? ? ? ?B ---------- ---------- ---------- ---------- 2 ? ? ? ? ?2 ? ? ? ? ?2 ? ? ? ? ?2 3 ? ? ? ? ?3 ? ? ? ? ?3 ? ? ? ? ?3 1 ? ? ? ? ?1 SQL> select * from t1 2 ? ?join t2 3 ?on t1.a=t2.a 4 ?; A ? ? ? ? ?B ? ? ? ? ?A ? ? ? ? ?B ---------- ---------- ---------- ---------- 2 ? ? ? ? ?2 ? ? ? ? ?2 ? ? ? ? ?2 3 ? ? ? ? ?3 ? ? ? ? ?3 ? ? ? ? ?3 where條件在t2表的關連建上: SQL> select * from t1 2 ? ?join t2 3 ?on t1.a=t2.a 4 ?where t2.a=2 5 ?; A ? ? ? ? ?B ? ? ? ? ?A ? ? ? ? ?B ---------- ---------- ---------- ---------- 2 ? ? ? ? ?2 ? ? ? ? ?2 ? ? ? ? ?2 SQL> select * from t1 2 ?left ?join t2 3 ?on t1.a=t2.a 4 ?where t2.a=2 5 ?; A ? ? ? ? ?B ? ? ? ? ?A ? ? ? ? ?B ---------- ---------- ---------- ---------- 2 ? ? ? ? ?2 ? ? ? ? ?2 ? ? ? ? ?2 where條件在t2表的非關連建上: SQL> select * from t1 2 ? ?join t2 3 ?on t1.a=t2.a 4 ?where t2.b=2 5 ?; A ? ? ? ? ?B ? ? ? ? ?A ? ? ? ? ?B ---------- ---------- ---------- ---------- 2 ? ? ? ? ?2 ? ? ? ? ?2 ? ? ? ? ?2 SQL> select * from t1 2 ?left ?join t2 3 ?on t1.a=t2.a 4 ?where t2.b=2 5 ?; A ? ? ? ? ?B ? ? ? ? ?A ? ? ? ? ?B ---------- ---------- ---------- ---------- 2 ? ? ? ? ?2 ? ? ? ? ?2 ? ? ? ? ?2 以下2種寫法等價: SQL> select * from t1 2 ?left ?join t2 3 ?on t1.a=t2.a 4 ?and t2.a=2 5 ?; A ? ? ? ? ?B ? ? ? ? ?A ? ? ? ? ?B ---------- ---------- ---------- ---------- 2 ? ? ? ? ?2 ? ? ? ? ?2 ? ? ? ? ?2 3 ? ? ? ? ?3 1 ? ? ? ? ?1 SQL> select * from t1,t2 where t1.a=t2.a(+) and t2.a(+)=2; A ? ? ? ? ?B ? ? ? ? ?A ? ? ? ? ?B ---------- ---------- ---------- ---------- 2 ? ? ? ? ?2 ? ? ? ? ?2 ? ? ? ? ?2 3 ? ? ? ? ?3 1 ? ? ? ? ?1 left join on and on 與 left join on where 的區別: 第一種是:先根據on過濾,再關聯 第二種是:先關聯再根據where過濾 這2種寫法意義是不同的, inner jion沒這個特殊性,則條件放在on中和where中,返回的結果集是相同的 實驗: 創建2張表 SQL> select * from table1; ID ? ?ID_NAME ---------- ---------- 1 ? ? ? ? 10 2 ? ? ? ? 20 3 ? ? ? ? 30 SQL> select * from table2; ID_NAME NAME ---------- ---------- 10 AAA 20 BBB 30 CCC 第一種寫法:t1只和t2的AAA關聯,但還是顯示所有行 SQL> select * from table1 t1 2 ?left join table2 t2 3 ?on t1.id_name=t2.id_name 4 ?and t2.name='AAA'; ID ? ?ID_NAME ? ?ID_NAME NAME ---------- ---------- ---------- ---------- 1 ? ? ? ? 10 ? ? ? ? 10 AAA 3 ? ? ? ? 30 2 ? ? ? ? 20 即使and使用t1,因為left join,也會留下所有行 SQL> select * from table1 t1 2 ?left join table2 t2 3 ?on t1.id_name=t2.id_name 4 ?and t1.id=1; ID ? ?ID_NAME ? ?ID_NAME NAME ---------- ---------- ---------- ---------- 1 ? ? ? ? 10 ? ? ? ? 10 AAA 2 ? ? ? ? 20 3 ? ? ? ? 30 SQL> select * from table1 t1 2 ?left join table2 t2 3 ?on t1.id_name=t2.id_name 4 ?and t1.id=0; ID ? ?ID_NAME ? ?ID_NAME NAME ---------- ---------- ---------- ---------- 2 ? ? ? ? 20 3 ? ? ? ? 30 1 ? ? ? ? 10 第二種寫法:t1和t2所有行關聯,結果集再過濾,所以只留下1行 SQL> select * from table1 t1 2 ?left join table2 t2 3 ?on t1.id_name=t2.id_name 4 ?where t2.name='AAA'; ID ? ?ID_NAME ? ?ID_NAME NAME ---------- ---------- ---------- ---------- 1 ? ? ? ? 10 ? ? ? ? 10 AAA ----------------------------------------------------- with as --------------------------------------------------------------- select * from (? with a as (select 1 from dual union all select 1 from dual),? b as (select renshu from (select rownum renshu from a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a,a) where renshu>30000 and renshu<100000 )? select distinct DECODE(mod(renshu, 3),? 1,? decode(mod(renshu, 5),? 2,? decode(mod(renshu, 7),? 4,? decode(mod(renshu, 11),? 6,? decode(mod(renshu, 23), 8, renshu))))) renshu1? from b? ) aa where aa.renshu1 is not null;? -----------------------------------------------------分析函數 --------------------------------------------------------------- 分析函數的功能:排名 1、按照3種方式為cnt列排名 SQL> with t as 2 ? (select rownum * 10 cnt ?from dual connect by rownum < 5 3 ? ?union all 4 ? ?select rownum * 40 - 10 from dual connect by rownum < 3)t 表構造出10,20,30,30,40,70 5 ?select cnt, 6 ? ? ? ? row_number() over(order by cnt) rn,//排名無并列,且每個排名與緊接著的下一個排名都是連續的row_number(),不需要參數 7 ? ? ? ? rank() over(order by cnt) rk,//排名有并列,且并列的排名與緊接著的下一個排名不連續rank() 8 ? ? ? ? dense_rank() over(order by cnt) drk//排名有并列,且并列的排名與緊接著的下一個排名連續dense_rank() 9 ? ?from t; CNT ? ? ? ? RN ? ? ? ? RK ? ? ? ?DRK ---------- ---------- ---------- ---------- 10 ? ? ? ? ?1 ? ? ? ? ?1 ? ? ? ? ?1 20 ? ? ? ? ?2 ? ? ? ? ?2 ? ? ? ? ?2 30 ? ? ? ? ?3 ? ? ? ? ?3 ? ? ? ? ?3 30 ? ? ? ? ?4 ? ? ? ? ?3 ? ? ? ? ?3 40 ? ? ? ? ?5 ? ? ? ? ?5 ? ? ? ? ?4 70 ? ? ? ? ?6 ? ? ? ? ?6 ? ? ? ? ?5 已選擇6行。 2、分組排名:按照dept分組后,按照sale用3種方式排名 SQL> select dept_id, 2 ? ? ? ? sale_date, 3 ? ? ? ? goods_type, 4 ? ? ? ? sale_cnt, 5 ? ? ? ? row_number() over(partition by dept_id order by sale_cnt desc) rn,//分組的話,使用partition by dept,排名用order by sale 6 ? ? ? ? rank() ? ? ? ? ? ?over(partition by dept_id order by sale_cnt desc) rk,//partition、order by均可以有多列 7 ? ? ? ? dense_rank() over(partition by dept_id order by sale_cnt desc) drk 8 ? ?from lw_sales 9 ? where trunc(sale_date, 'MM') = date '2013-04-01' ; DEPT_I SALE_DATE ? ? ?GOOD ? SALE_CNT ? ? ? ? RN ? ? ? ? RK ? ? ? ?DRK ------ -------------- ---- ---------- ---------- ---------- ---------- S00 ? ?18-4月 -13 ? ? G01 ? ? ? ? 300 ? ? ? ? ?1 ? ? ? ? ?1 ? ? ? ? ?1 S01 ? ?20-4月 -13 ? ? G04 ? ? ? ? 900 ? ? ? ? ?1 ? ? ? ? ?1 ? ? ? ? ?1 S01 ? ?13-4月 -13 ? ? G00 ? ? ? ? 900 ? ? ? ? ?2 ? ? ? ? ?1 ? ? ? ? ?1 S01 ? ?15-4月 -13 ? ? G01 ? ? ? ? 400 ? ? ? ? ?3 ? ? ? ? ?3 ? ? ? ? ?2 S01 ? ?07-4月 -13 ? ? G02 ? ? ? ? 300 ? ? ? ? ?4 ? ? ? ? ?4 ? ? ? ? ?3 S01 ? ?03-4月 -13 ? ? G03 ? ? ? ? 200 ? ? ? ? ?5 ? ? ? ? ?5 ? ? ? ? ?4 S02 ? ?05-4月 -13 ? ? G03 ? ? ? ? 800 ? ? ? ? ?1 ? ? ? ? ?1 ? ? ? ? ?1 S02 ? ?05-4月 -13 ? ? G00 ? ? ? ? 400 ? ? ? ? ?2 ? ? ? ? ?2 ? ? ? ? ?2 S02 ? ?22-4月 -13 ? ? G03 ? ? ? ? 300 ? ? ? ? ?3 ? ? ? ? ?3 ? ? ? ? ?3 S02 ? ?06-4月 -13 ? ? G04 ? ? ? ? 300 ? ? ? ? ?4 ? ? ? ? ?3 ? ? ? ? ?3 已選擇10行。 分析函數的功能:相鄰 –LAG ? 是取到排序后,向上相鄰的記錄 –LEAD 是取到排序后,向下相鄰的記錄 LAG/LEAD(v, n, dv) over(partition by a order by b):按照a分組后,每組按b排序,列出排序后v列前n行的值,沒有找到則列出dv 例:先按deptno分組,再按sal排序,列出與ename相鄰2行的ename,如果往上2行無數據為‘AAA',往下2行無數據為‘ZZZ’: SQL> select deptno, 2 ? ? ? ? ename, 3 ? ? ? ? sal, 4 ? ? ? ? lag(ename, 2, 'AAA') ?over(partition by deptno order by sal) lower_name, 5 ? ? ? ? lead(ename, 2, 'ZZZ') over(partition by deptno order by sal) higher_name 6 ? ?from scott.emp; DEPTNO ENAME ? ? ? ? ? ? SAL LOWER_NAME HIGHER_NAM ---------- ---------- ---------- ---------- ---------- 10 MILLER ? ? ? ? ? 1300 AAA ? ? ? ?KING 10 CLARK ? ? ? ? ? ?2450 AAA ? ? ? ?ZZZ 10 KING ? ? ? ? ? ? 5000 MILLER ? ? ZZZ 20 SMITH ? ? ? ? ? ? 800 AAA ? ? ? ?FORD 20 JONES ? ? ? ? ? ?2975 AAA ? ? ? ?ZZZ 20 FORD ? ? ? ? ? ? 3000 SMITH ? ? ?ZZZ 30 JAMES ? ? ? ? ? ? 950 AAA ? ? ? ?WARD 30 MARTIN ? ? ? ? ? 1250 AAA ? ? ? ?TURNER 30 WARD ? ? ? ? ? ? 1250 JAMES ? ? ?ALLEN 30 TURNER ? ? ? ? ? 1500 MARTIN ? ? BLAKE 30 ALLEN ? ? ? ? ? ?1600 WARD ? ? ? ZZZ DEPTNO ENAME ? ? ? ? ? ? SAL LOWER_NAME HIGHER_NAM ---------- ---------- ---------- ---------- ---------- 30 BLAKE ? ? ? ? ? ?2850 TURNER ? ? ZZZ LiKun ? ? ? ? ? ? ? ? AAA ? ? ? ?ZZZ 已選擇13行。 同樣可實現相同的行,只輸出一次,如上例中10只輸出一次 SQL> select (case 2 ? ? ? ? ? when deptno = lag(deptno, 1, -1) over(partition by deptno order by ename) then//如果deptno=上一行的deptno,則輸出null; 3 ? ? ? ? ? ?null 4 ? ? ? ? ? else//如果不等于,則表示是新數據,直接顯示deptno 5 ? ? ? ? ? ?deptno 6 ? ? ? ? end) deptno, 7 ? ? ? ? ename, 8 ? ? ? ? sal, 9 ? ? ? ? lag(ename, 2, 'AAA') over(partition by deptno order by sal) lower_name, 10 ? ? ? ? lead(ename, 2, 'ZZZ') over(partition by deptno order by sal) higher_name 11 ? ?from scott.emp; DEPTNO ENAME ? ? ? ? ? ? SAL LOWER_NAME HIGHER_NAM ---------- ---------- ---------- ---------- ---------- 10 CLARK ? ? ? ? ? ?2450 AAA ? ? ? ?ZZZ KING ? ? ? ? ? ? 5000 MILLER ? ? ZZZ MILLER ? ? ? ? ? 1300 AAA ? ? ? ?KING 20 FORD ? ? ? ? ? ? 3000 SMITH ? ? ?ZZZ JONES ? ? ? ? ? ?2975 AAA ? ? ? ?ZZZ SMITH ? ? ? ? ? ? 800 AAA ? ? ? ?FORD 30 ALLEN ? ? ? ? ? ?1600 WARD ? ? ? ZZZ BLAKE ? ? ? ? ? ?2850 TURNER ? ? ZZZ JAMES ? ? ? ? ? ? 950 AAA ? ? ? ?WARD MARTIN ? ? ? ? ? 1250 AAA ? ? ? ?TURNER TURNER ? ? ? ? ? 1500 MARTIN ? ? BLAKE WARD ? ? ? ? ? ? 1250 JAMES ? ? ?ALLEN LiKun ? ? ? ? ? ? ? ? AAA ? ? ? ?ZZZ 已選擇13行。 分析函數的功能:統計 sum(cnt) over(partition by a order by b) 按a分組后,按b的順序對cnt進行累計 例如:求出每個部門按商品類型分共累計多少銷售額,以及部門中按商品類型累計的銷售額 SQL> with t as 2 ? (select dept_id, 3 ? ? ? ? ? goods_type, 4 ? ? ? ? ? sum(sale_cnt) goods_sale_cnt 5 ? ? ?from lw_sales 6 ? ? group by dept_id, goods_type) 7 ?select dept_id, 8 ? ? ? ? goods_type, 9 ? ? ? ? goods_sale_cnt, 10 ? ? ? ? sum(goods_sale_cnt) over(partition by dept_id order by goods_type) cum_goods_sale_cnt 11 ? ?from t; DEPT_I GOOD GOODS_SALE_CNT CUM_GOODS_SALE_CNT ------ ---- -------------- ------------------ S00 ? ?G00 ? ? ? ? ? ? 400 ? ? ? ? ? ? ? ?400 S00 ? ?G01 ? ? ? ? ? ? 330 ? ? ? ? ? ? ? ?730 S00 ? ?G03 ? ? ? ? ? ?1000 ? ? ? ? ? ? ? 1730 S00 ? ?G04 ? ? ? ? ? ?1000 ? ? ? ? ? ? ? 2730 S00 ? ?G05 ? ? ? ? ? ? 900 ? ? ? ? ? ? ? 3630 S01 ? ?G00 ? ? ? ? ? ?1600 ? ? ? ? ? ? ? 1600 S01 ? ?G01 ? ? ? ? ? ? 800 ? ? ? ? ? ? ? 2400 S01 ? ?G02 ? ? ? ? ? ?1400 ? ? ? ? ? ? ? 3800 S01 ? ?G03 ? ? ? ? ? ? 800 ? ? ? ? ? ? ? 4600 S01 ? ?G04 ? ? ? ? ? ?2530 ? ? ? ? ? ? ? 7130 S02 ? ?G00 ? ? ? ? ? ? 400 ? ? ? ? ? ? ? ?400 S02 ? ?G01 ? ? ? ? ? ? 270 ? ? ? ? ? ? ? ?670 S02 ? ?G02 ? ? ? ? ? ? 900 ? ? ? ? ? ? ? 1570 S02 ? ?G03 ? ? ? ? ? ?1100 ? ? ? ? ? ? ? 2670 S02 ? ?G04 ? ? ? ? ? ? 300 ? ? ? ? ? ? ? 2970 S02 ? ?G05 ? ? ? ? ? ? 200 ? ? ? ? ? ? ? 3170 已選擇16行。 avg() over()平均值 例如:求出每個部門每種貨物的累計銷售額,以及這種貨物在各部門中的平均銷售額,以及他們的差 SQL> with t as 2 ? (select dept_id, goods_type, sum(sale_cnt) goods_sale_cnt 3 ? ? ?from lw_sales 4 ? ? group by dept_id, goods_type) 5 ?select dept_id, 6 ? ? ? ? goods_type, 7 ? ? ? ? goods_sale_cnt, 8 ? ? ? ? round(AVG(goods_sale_cnt) over(partition by goods_type), 2) avg_goods_sale_cnt, 9 ? ? ? ? goods_sale_cnt - 10 ? ? ? ? round(AVG(goods_sale_cnt) over(partition by goods_type), 2) dv_goods_sale_cnt 11 ? ?from t; DEPT_I GOOD GOODS_SALE_CNT AVG_GOODS_SALE_CNT DV_GOODS_SALE_CNT ------ ---- -------------- ------------------ ----------------- S00 ? ?G00 ? ? ? ? ? ? 400 ? ? ? ? ? ? ? ?800 ? ? ? ? ? ? ?-400 S01 ? ?G00 ? ? ? ? ? ?1600 ? ? ? ? ? ? ? ?800 ? ? ? ? ? ? ? 800 S02 ? ?G00 ? ? ? ? ? ? 400 ? ? ? ? ? ? ? ?800 ? ? ? ? ? ? ?-400 S00 ? ?G01 ? ? ? ? ? ? 330 ? ? ? ? ? ? 466.67 ? ? ? ? ? -136.67 S01 ? ?G01 ? ? ? ? ? ? 800 ? ? ? ? ? ? 466.67 ? ? ? ? ? ?333.33 S02 ? ?G01 ? ? ? ? ? ? 270 ? ? ? ? ? ? 466.67 ? ? ? ? ? -196.67 S01 ? ?G02 ? ? ? ? ? ?1400 ? ? ? ? ? ? ? 1150 ? ? ? ? ? ? ? 250 S02 ? ?G02 ? ? ? ? ? ? 900 ? ? ? ? ? ? ? 1150 ? ? ? ? ? ? ?-250 S00 ? ?G03 ? ? ? ? ? ?1000 ? ? ? ? ? ? 966.67 ? ? ? ? ? ? 33.33 S01 ? ?G03 ? ? ? ? ? ? 800 ? ? ? ? ? ? 966.67 ? ? ? ? ? -166.67 S02 ? ?G03 ? ? ? ? ? ?1100 ? ? ? ? ? ? 966.67 ? ? ? ? ? ?133.33 S00 ? ?G04 ? ? ? ? ? ?1000 ? ? ? ? ? ?1276.67 ? ? ? ? ? -276.67 S01 ? ?G04 ? ? ? ? ? ?2530 ? ? ? ? ? ?1276.67 ? ? ? ? ? 1253.33 S02 ? ?G04 ? ? ? ? ? ? 300 ? ? ? ? ? ?1276.67 ? ? ? ? ? -976.67 S00 ? ?G05 ? ? ? ? ? ? 900 ? ? ? ? ? ? ? ?550 ? ? ? ? ? ? ? 350 S02 ? ?G05 ? ? ? ? ? ? 200 ? ? ? ? ? ? ? ?550 ? ? ? ? ? ? ?-350 已選擇16行。 max(col1) over(partition by col2 order by col3):partition可選;order by可選,寫上表示依次選出最大,不寫表示組內所有值的最大 按月分組列出銷售額的最高和最低 SQL> select dept_id, 2 ? ? ? ? to_char(sale_date, 'YYYY-MM') sale_month, 3 ? ? ? ? sum(sale_cnt) goods_sale_cnt, 4 ? ? ? ? max(sum(sale_cnt)) over(partition by to_char(sale_date, 'YYYY-MM')) max_gsc, 5 ? ? ? ? min(sum(sale_cnt)) over(partition by to_char(sale_date, 'YYYY-MM')) min_gsc 6 ? ?from lw_sales 7 ? where goods_type = 'G01' 8 ? group by dept_id, to_char(sale_date, 'YYYY-MM') 9 ?; DEPT_I SALE_MO GOODS_SALE_CNT ? ?MAX_GSC ? ?MIN_GSC ------ ------- -------------- ---------- ---------- S00 ? ?2013-03 ? ? ? ? ? ? 30 ? ? ? ?400 ? ? ? ? 30 S01 ? ?2013-03 ? ? ? ? ? ?400 ? ? ? ?400 ? ? ? ? 30 S02 ? ?2013-03 ? ? ? ? ? ?270 ? ? ? ?400 ? ? ? ? 30 S00 ? ?2013-04 ? ? ? ? ? ?300 ? ? ? ?400 ? ? ? ?300 S01 ? ?2013-04 ? ? ? ? ? ?400 ? ? ? ?400 ? ? ? ?300 -----------------------------------------------------函數索引 --------------------------------------------------------------- SQL> select job,count(distinct deptno) from scott.emp where mgr is not null group by job; JOB ? ? ? COUNT(DISTINCTDEPTNO) --------- --------------------- CLERK ? ? ? ? ? ? ? ? ? ? ? ? 3 SALESMAN ? ? ? ? ? ? ? ? ? ? ?1 MANAGER ? ? ? ? ? ? ? ? ? ? ? 3 ANALYST ? ? ? ? ? ? ? ? ? ? ? 1 SQL> set autot trace SQL> select job,count(distinct deptno) from scott.emp where mgr is not null group by job; 執行計劃 ---------------------------------------------------------- Plan hash value: 3818262728 ---------------------------------------------------------------------------------- | Id ?| Operation ? ? ? ? ? ?| Name ? ? ?| Rows ?| Bytes | Cost (%CPU)| Time ? ? | ---------------------------------------------------------------------------------- | ? 0 | SELECT STATEMENT ? ? | ? ? ? ? ? | ? ? 5 | ? 105 | ? ? 4 ?(25)| 00:00:01 | | ? 1 | ?HASH GROUP BY ? ? ? | ? ? ? ? ? | ? ? 5 | ? 105 | ? ? 4 ?(25)| 00:00:01 | | ? 2 | ? VIEW ? ? ? ? ? ? ? | VM_NWVW_1 | ? ?11 | ? 231 | ? ? 4 ?(25)| 00:00:01 | | ? 3 | ? ?HASH GROUP BY ? ? | ? ? ? ? ? | ? ?11 | ? 165 | ? ? 4 ?(25)| 00:00:01 | |* ?4 | ? ? TABLE ACCESS FULL| EMP ? ? ? | ? ?11 | ? 165 | ? ? 3 ? (0)| 00:00:01 | ---------------------------------------------------------------------------------- Predicate Information (identified by operation id): --------------------------------------------------- 4 - filter("MGR" IS NOT NULL) 統計信息 ---------------------------------------------------------- 0 ?recursive calls 0 ?db block gets 6 ?consistent gets 0 ?physical reads 0 ?redo size 578 ?bytes sent via SQL*Net to client 415 ?bytes received via SQL*Net from client 2 ?SQL*Net roundtrips to/from client 0 ?sorts (memory) 0 ?sorts (disk) 4 ?rows processed SQL> select job,count(distinct deptno) from scott.emp where nvl2(mgr,1,0)=1 group by job order by job; 執行計劃 ---------------------------------------------------------- Plan hash value: 2809461788 ---------------------------------------------------------------------------------- | Id ?| Operation ? ? ? ? ? ?| Name ? ? ?| Rows ?| Bytes | Cost (%CPU)| Time ? ? | ---------------------------------------------------------------------------------- | ? 0 | SELECT STATEMENT ? ? | ? ? ? ? ? | ? ? 1 | ? ?21 | ? ? 4 ?(25)| 00:00:01 | | ? 1 | ?SORT GROUP BY ? ? ? | ? ? ? ? ? | ? ? 1 | ? ?21 | ? ? 4 ?(25)| 00:00:01 | | ? 2 | ? VIEW ? ? ? ? ? ? ? | VM_NWVW_1 | ? ? 1 | ? ?21 | ? ? 4 ?(25)| 00:00:01 | | ? 3 | ? ?HASH GROUP BY ? ? | ? ? ? ? ? | ? ? 1 | ? ?15 | ? ? 4 ?(25)| 00:00:01 | |* ?4 | ? ? TABLE ACCESS FULL| EMP ? ? ? | ? ? 1 | ? ?15 | ? ? 3 ? (0)| 00:00:01 | ---------------------------------------------------------------------------------- Predicate Information (identified by operation id): --------------------------------------------------- 4 - filter(NVL2("MGR",1,0)=1) 統計信息 ---------------------------------------------------------- 1 ?recursive calls 0 ?db block gets 6 ?consistent gets 0 ?physical reads 0 ?redo size 575 ?bytes sent via SQL*Net to client 415 ?bytes received via SQL*Net from client 2 ?SQL*Net roundtrips to/from client 1 ?sorts (memory) 0 ?sorts (disk) 4 ?rows processed SQL> create index i_emp_mgr on scott.emp(nvl2(mgr,1,0)); 索引已創建。 SQL> select job,count(distinct deptno) from scott.emp where nvl2(mgr,1,0)=1 group by job order by job; 執行計劃 ---------------------------------------------------------- Plan hash value: 1097451957 -------------------------------------------------------------------------------------------- | Id ?| Operation ? ? ? ? ? ? ? ? ? ? ?| Name ? ? ?| Rows ?| Bytes | Cost (%CPU)| Time ? ? | -------------------------------------------------------------------------------------------- | ? 0 | SELECT STATEMENT ? ? ? ? ? ? ? | ? ? ? ? ? | ? ? 1 | ? ?21 | ? ? 3 ?(34)| 00:00:01 | | ? 1 | ?SORT GROUP BY ? ? ? ? ? ? ? ? | ? ? ? ? ? | ? ? 1 | ? ?21 | ? ? 3 ?(34)| 00:00:01 | | ? 2 | ? VIEW ? ? ? ? ? ? ? ? ? ? ? ? | VM_NWVW_1 | ? ? 1 | ? ?21 | ? ? 3 ?(34)| 00:00:01 | | ? 3 | ? ?HASH GROUP BY ? ? ? ? ? ? ? | ? ? ? ? ? | ? ? 1 | ? ?14 | ? ? 3 ?(34)| 00:00:01 | | ? 4 | ? ? TABLE ACCESS BY INDEX ROWID| EMP ? ? ? | ? ? 1 | ? ?14 | ? ? 2 ? (0)| 00:00:01 | |* ?5 | ? ? ?INDEX RANGE SCAN ? ? ? ? ?| I_EMP_MGR | ? ? 1 | ? ? ? | ? ? 1 ? (0)| 00:00:01 | -------------------------------------------------------------------------------------------- Predicate Information (identified by operation id): --------------------------------------------------- 5 - access(NVL2("MGR",1,0)=1) 統計信息 ---------------------------------------------------------- 2 ?recursive calls 0 ?db block gets 4 ?consistent gets 0 ?physical reads 0 ?redo size 575 ?bytes sent via SQL*Net to client 415 ?bytes received via SQL*Net from client 2 ?SQL*Net roundtrips to/from client 1 ?sorts (memory) 0 ?sorts (disk) 4 ?rows processed -----------------------------------------------------用 EXISTS 替換DISTINCT --------------------------------------------------------------- 當提交一個包含一對多表信息(比如部門表和雇員表)的查詢時,避免在SELECT 子句中使用 DISTINCT. 一般可以考慮用EXIST 替換 例如: 低效:(nestloop,外加unique) SELECT DISTINCT d.DEPTNO, d.DNAME FROM scott.DEPT D, scott.EMP E WHERE D.DEPTNO = E.DEPTNO 執行計劃 ---------------------------------------------------------- Plan hash value: 2401638402 ---------------------------------------------------------------------------------- | Id ?| Operation ? ? ? ? ? | Name ? ? ? | Rows ?| Bytes | Cost (%CPU)| Time ? ? | ---------------------------------------------------------------------------------- | ? 0 | SELECT STATEMENT ? ?| ? ? ? ? ? ?| ? ? 5 | ? ?80 | ? ? 4 ?(25)| 00:00:01 | | ? 1 | ?HASH UNIQUE ? ? ? ?| ? ? ? ? ? ?| ? ? 5 | ? ?80 | ? ? 4 ?(25)| 00:00:01 | | ? 2 | ? NESTED LOOPS ? ? ?| ? ? ? ? ? ?| ? ?12 | ? 192 | ? ? 3 ? (0)| 00:00:01 | | ? 3 | ? ?TABLE ACCESS FULL| DEPT ? ? ? | ? ? 4 | ? ?52 | ? ? 3 ? (0)| 00:00:01 | |* ?4 | ? ?INDEX RANGE SCAN | EMP_DEPTNO | ? ? 3 | ? ? 9 | ? ? 0 ? (0)| 00:00:01 | ---------------------------------------------------------------------------------- Predicate Information (identified by operation id): --------------------------------------------------- 4 - access("D"."DEPTNO"="E"."DEPTNO") filter("E"."DEPTNO" IS NOT NULL) 高效:(nestloop) SELECT d.DEPTNO, d.DNAME FROM scott.DEPT D WHERE EXISTS (SELECT 1 FROM scott.EMP E WHERE E.DEPTNO = D.DEPTNO); 執行計劃 ---------------------------------------------------------- Plan hash value: 3369102344 --------------------------------------------------------------------------------- | Id ?| Operation ? ? ? ? ?| Name ? ? ? | Rows ?| Bytes | Cost (%CPU)| Time ? ? | --------------------------------------------------------------------------------- | ? 0 | SELECT STATEMENT ? | ? ? ? ? ? ?| ? ? 3 | ? ?48 | ? ? 3 ? (0)| 00:00:01 | | ? 1 | ?NESTED LOOPS SEMI | ? ? ? ? ? ?| ? ? 3 | ? ?48 | ? ? 3 ? (0)| 00:00:01 | | ? 2 | ? TABLE ACCESS FULL| DEPT ? ? ? | ? ? 4 | ? ?52 | ? ? 3 ? (0)| 00:00:01 | |* ?3 | ? INDEX RANGE SCAN | EMP_DEPTNO | ? ? 8 | ? ?24 | ? ? 0 ? (0)| 00:00:01 | --------------------------------------------------------------------------------- Predicate Information (identified by operation id): --------------------------------------------------- 3 - access("E"."DEPTNO"="D"."DEPTNO") filter("E"."DEPTNO" IS NOT NULL) EXISTS 使查詢更為迅速,因為RDBMS 核心模塊將在子查詢的條件一旦滿足后,立刻返回結 果. -----------------------------------------------------------索引合并 --------------------------------------------------------------- empno和ename上都有unique索引,會根據2個索引的rowid做個bitmap合并 SQL> select * from scott.emp e where e.empno=7369 and ename='SMITH'; 執行計劃 ---------------------------------------------------------- Plan hash value: 2575831182 ------------------------------------------------------------------------------------------- | Id ?| Operation ? ? ? ? ? ? ? ? ? ? ? ?| Name ? | Rows ?| Bytes | Cost (%CPU)| Time ? ? | ------------------------------------------------------------------------------------------- | ? 0 | SELECT STATEMENT ? ? ? ? ? ? ? ? | ? ? ? ?| ? ? 1 | ? ?39 | ? ? 0 ? (0)| 00:00:01 | | ? 1 | ?TABLE ACCESS BY INDEX ROWID ? ? | EMP ? ?| ? ? 1 | ? ?39 | ? ? 0 ? (0)| 00:00:01 | | ? 2 | ? BITMAP CONVERSION TO ROWIDS ? ?| ? ? ? ?| ? ? ? | ? ? ? | ? ? ? ? ? ?| ? ? ? ? ?| | ? 3 | ? ?BITMAP AND ? ? ? ? ? ? ? ? ? ?| ? ? ? ?| ? ? ? | ? ? ? | ? ? ? ? ? ?| ? ? ? ? ?| | ? 4 | ? ? BITMAP CONVERSION FROM ROWIDS| ? ? ? ?| ? ? ? | ? ? ? | ? ? ? ? ? ?| ? ? ? ? ?| |* ?5 | ? ? ?INDEX RANGE SCAN ? ? ? ? ? ?| PK_EMP | ? ? 1 | ? ? ? | ? ? 0 ? (0)| 00:00:01 | | ? 6 | ? ? BITMAP CONVERSION FROM ROWIDS| ? ? ? ?| ? ? ? | ? ? ? | ? ? ? ? ? ?| ? ? ? ? ?| |* ?7 | ? ? ?INDEX RANGE SCAN ? ? ? ? ? ?| BBB ? ?| ? ? 1 | ? ? ? | ? ? 0 ? (0)| 00:00:01 | ------------------------------------------------------------------------------------------- Predicate Information (identified by operation id): --------------------------------------------------- 5 - access("E"."EMPNO"=7369) 7 - access("ENAME"='SMITH') -----------------------------------------------------------索引優先級 --------------------------------------------------------------- empno上有唯一索引,deptno上為非唯一索引,但是查詢選擇使用depno上的索引, 雖然 EMPNO 是唯一性索引,但是由于它所做的是范圍比較, 等級要比非唯一性索引的等式比較低! SQL> select * from scott.emp e where e.empno>73 and deptno=20; 執行計劃 ---------------------------------------------------------- Plan hash value: 1182541070 ------------------------------------------------------------------------------------------ | Id ?| Operation ? ? ? ? ? ? ? ? ? | Name ? ? ? | Rows ?| Bytes | Cost (%CPU)| Time ? ? | ------------------------------------------------------------------------------------------ | ? 0 | SELECT STATEMENT ? ? ? ? ? ?| ? ? ? ? ? ?| ? ? 3 | ? 117 | ? ? 2 ? (0)| 00:00:01 | |* ?1 | ?TABLE ACCESS BY INDEX ROWID| EMP ? ? ? ?| ? ? 3 | ? 117 | ? ? 2 ? (0)| 00:00:01 | |* ?2 | ? INDEX RANGE SCAN ? ? ? ? ?| EMP_DEPTNO | ? ? 3 | ? ? ? | ? ? 1 ? (0)| 00:00:01 | ------------------------------------------------------------------------------------------ Predicate Information (identified by operation id): --------------------------------------------------- 1 - filter("E"."EMPNO">73) 2 - access("DEPTNO"=20) -----------------------------------------------------------Order by 使用索引 --------------------------------------------------------------- ORDER BY 子句只在兩種嚴格的條件下使用索引. 1ORDER BY 中所有的列必須包含在相同的索引中并保持在索引中的排列順序. 2ORDER BY 中所有的列必須定義為非空. SQL> ?select * from test1 ?order by id1;(未使用索引,因為列不是非空) 已選擇8192行。 執行計劃 ---------------------------------------------------------- Plan hash value: 1692556001 ------------------------------------------------------------------------------------ | Id ?| Operation ? ? ? ? ?| Name ?| Rows ?| Bytes |TempSpc| Cost (%CPU)| Time ? ? | ------------------------------------------------------------------------------------ | ? 0 | SELECT STATEMENT ? | ? ? ? | ?8192 | ? 416K| ? ? ? | ? 125 ? (1)| 00:00:02 | | ? 1 | ?SORT ORDER BY ? ? | ? ? ? | ?8192 | ? 416K| ? 528K| ? 125 ? (1)| 00:00:02 | | ? 2 | ? TABLE ACCESS FULL| TEST1 | ?8192 | ? 416K| ? ? ? | ? ?17 ? (0)| 00:00:01 | ------------------------------------------------------------------------------------ Note ----- - dynamic sampling used for this statement (level=2) 統計信息 ---------------------------------------------------------- 0 ?recursive calls 0 ?db block gets 58 ?consistent gets 0 ?physical reads 0 ?redo size 176097 ?bytes sent via SQL*Net to client 6422 ?bytes received via SQL*Net from client 548 ?SQL*Net roundtrips to/from client 1 ?sorts (memory) 0 ?sorts (disk) 8192 ?rows processed SQL> alter table test1 modify id1 not null; 表已更改。 SQL> ?select * from test1 ?order by id1;(走索引) 已選擇8192行。 執行計劃 ---------------------------------------------------------- Plan hash value: 2136352608 ------------------------------------------------------------------------------------- | Id ?| Operation ? ? ? ? ? ? ? ? ? | Name ?| Rows ?| Bytes | Cost (%CPU)| Time ? ? | ------------------------------------------------------------------------------------- | ? 0 | SELECT STATEMENT ? ? ? ? ? ?| ? ? ? | ?8192 | ? 416K| ? ?32 ? (0)| 00:00:01 | | ? 1 | ?TABLE ACCESS BY INDEX ROWID| TEST1 | ?8192 | ? 416K| ? ?32 ? (0)| 00:00:01 | | ? 2 | ? INDEX FULL SCAN ? ? ? ? ? | MMM ? | ?8192 | ? ? ? | ? ?19 ? (0)| 00:00:01 | ------------------------------------------------------------------------------------- Note ----- - dynamic sampling used for this statement (level=2) 統計信息 ---------------------------------------------------------- 30 ?recursive calls 0 ?db block gets 13526 ?consistent gets 17 ?physical reads 0 ?redo size 248747 ?bytes sent via SQL*Net to client 6422 ?bytes received via SQL*Net from client 548 ?SQL*Net roundtrips to/from client 4 ?sorts (memory) 0 ?sorts (disk) 8192 ?rows processed -----------------------------------------------------------NOT in 與 NOT exists -------------------------------------------------------------- exist不檢測實際的值~只是做一個存在判斷就立刻返回~所以null值也返回給結果集了 in 會查詢結果集除了null值不會返回以外還會過濾重復的值 這兩個sql不等價: SQL> SELECT count(*) FROM qdata.t_pub010 t1 WHERE t1.f006 NOT IN (SELECT t2.comcode FROM qdata.t_stk005 t2); COUNT(*) ---------- 8725 SQL> SELECT count(*) FROM qdata.t_pub010 t1 WHERE NOT exists (SELECT t2.comcode FROM qdata.t_stk005 t2 where t2.comcode=t1.f006) ; COUNT(*) ---------- 22092 跟這個才等價: SQL> SELECT count(*) FROM qdata.t_pub010 t1 WHERE NOT exists (SELECT t2.comcode FROM qdata.t_stk005 t2 where t2.comcode=t1.f006) and t1.f006 is not null; COUNT(*) ---------- 8725 簡單說就是not in不會統計結果為null的,而not exists只是邏輯判斷,所以包含為null的結果: SQL> select count(*) from scott.emp where comm not in (1000,300); COUNT(*) ---------- 3 -----------------------------------------------------------標量子查詢的等價 -------------------------------------------------------------- DROP TABLE TEST111; CREATE TABLE TEST111 (ID INT ); INSERT ?INTO TEST111 VALUES (1); INSERT ?INTO TEST111 VALUES (2); INSERT ?INTO TEST111 VALUES (3); COMMIT; DROP TABLE TEST222; CREATE TABLE TEST222 (ID INT ); INSERT ?INTO TEST222 VALUES (1); INSERT ?INTO TEST222 VALUES (2); INSERT ?INTO TEST222 VALUES (NULL); COMMIT; 如下兩種寫法等價 SELECT T1.ID ?, ? (SELECT T2.ID FROM TEST222 T2 WHERE ID=T1.ID) ? ? ? ? ? ? FROM TEST111 T1; ID (SELECTT2.IDFROMTEST222T2WHERE --------------------------------------- ------------------------------ 1 ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?1 2 ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?2 3? SQL> SELECT T1.ID ,T2.ID FROM TEST111 T1 ,TEST222 T2 WHERE T1.ID=T2.ID(+); ID ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?ID --------------------------------------- --------------------------------------- 1 ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 1 2 ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 2 3? 如果不寫成外連接,將不等價 SQL> SELECT T1.ID ,T2.ID FROM TEST111 T1 ,TEST222 T2 WHERE T1.ID=T2.ID; ID ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?ID --------------------------------------- --------------------------------------- 1 ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 1 2 ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 2 如下是等價的 : select a.username, count(owner) from all_users a, all_objects b where a.username = b.owner (+) group by a.username; select a.username, (select count(*) from all_objects b where b.owner = a.username) cnt from all_users a -----------------------------------------------------------行列轉換函數 -------------------------------------------------------------- LISTAGG,多行合并,11.2新特性 SQL> select listagg(comm,',') within group(order by empno) from scott.emp; LISTAGG(COMM,',')WITHINGROUP(ORDERBYEMPNO) -------------------------------------------------------------------------- 1000,300,500,1400,0 說明:合并會忽略空值,不能去重,如果想去重,需要在from中用子查詢distinct,如:根據deptno分組,把job合并。 SQL>select deptno,listagg(job,',') within group(order by job) list from (select distinct deptno,job from scott.emp) group by deptno;//去重后 DEPTNO LIST ---------- ------------------------------ 10 CLERK,MANAGER,PRESIDENT 20 ANALYST,CLERK,MANAGER 30 CLERK,MANAGER,SALESMAN SQL> select deptno,listagg(job,',') within group(order by job) list from scott.emp group by deptno;//未去重 DEPTNO LIST ---------- ------------------------------ 10 CLERK,MANAGER,PRESIDENT 20 ANALYST,CLERK,MANAGER 30 CLERK,MANAGER,SALESMAN,SALESMAN,SALESMAN,SALESMAN WM_CONCAT SQL> select deptno,wmsys.wm_concat(job) from emp group by deptno; DEPTNOWMSYS.WM_CONCAT(JOB) ------------------------------------------------------------------------------------------ 10MANAGER,CLERK,PRESIDENT 20CLERK,ANALYST,CLERK,ANALYST,MANAGER 30SALESMAN,CLERK,SALESMAN,MANAGER,SALESMAN,SALESMAN SQL> select deptno,wmsys.wm_concat(distinct job) from emp group by deptno; DEPTNOWMSYS.WM_CONCAT(JOB) ------------------------------------------------------------------------------------------ 10MANAGER,CLERK,PRESIDENT 20ANALYST,CLERK,MANAGER 30SALESMAN,CLERK,MANAGER 說明:合并會去重,10g以后有,不能排序,可以去重。未公開函數,10g返回值是varchar,11.2.0.3.2變為clob。可以用做分析函數 SQL> select deptno,to_char(wmsys.wm_concat(job) over(partition by deptno order by job)) a from scott.emp; DEPTNO A ---------- ------------------------------------------------------------ 10 CLERK 10 CLERK,MANAGER 10 CLERK,MANAGER,PRESIDENT 20 ANALYST 20 ANALYST,CLERK 20 ANALYST,CLERK,MANAGER 30 CLERK 30 CLERK,MANAGER 30 CLERK,MANAGER,SALESMAN,SALESMAN,SALESMAN,SALESMAN 30 CLERK,MANAGER,SALESMAN,SALESMAN,SALESMAN,SALESMAN 30 CLERK,MANAGER,SALESMAN,SALESMAN,SALESMAN,SALESMAN -----------------------------------------------------------in 子查詢改寫 -------------------------------------------------------------- in的子查詢可以成表關聯方式,但是要注意去重 去重可通過group by或者distinct,否則會出現重復值 SQL> select * from az1; N ---------- 1 SQL> select * from az2; N ---------- 1 1 1 1 SQL> select * from az1 where n in (select n from az2); N ---------- 1 SQL> select * from az1,az2 where az1.n=az2.n group by az1.n,az2.n; N ? ? ? ? ?N ---------- ---------- 1 ? ? ? ? ?1 SQL> select distinct * from az1,az2 where az1.n=az2.n; N ? ? ? ? ?N ---------- ---------- 1 ? ? ? ? ?1 -----------------------------------------------------------根據某字段更新的優化 -------------------------------------------------------------- aaa表和bbb表是從scott.emp創建,至13000行,并把empno改成rownum; 原始語句: update bbb set sal=(select sal from aaa where bbb.empno=aaa.empno) where bbb.job='PRESIDENT'; 35S 優化為游標方式: create or replace procedure fuck is cursor allamt is select a.sal, a.empno from aaa a, bbb b where a.empno = b.empno; begin FOR tc in allamt loop update bbb b set b.sal = tc.sal where b.empno = tc.empno and b.job='PRESIDENT'; ? end loop; commit; end fuck; / exec fuck; 13s 再次優化為merge: merge into bbb using aaa on (aaa.empno=bbb.empno) when matched then update set bbb.sal=aaa.sal , bbb.mgr=aaa.mgr where bbb.job='PRESIDENT'; 2S -----------------------------------------------------------insert all -------------------------------------------------------------- insert all into a into b select * from dba_objects; 同時插入2張表,一個事務。一份復制,2份粘貼。性能更好。 分成2條寫,有可能中間dba_objects數據有了變化,導致ab表不一致了。 -----------------------------------------------------------connect by實現行展開成列 -------------------------------------------------------------- WITH T AS ( SELECT 'a' name ,1 ST, 4 EN FROM DUAL UNION ALL SELECT 'b' name ,1 ST, 4 EN FROM DUAL UNION ALL SELECT 'D' name ,3 ST, 3 EN FROM DUAL UNION ALL SELECT 'C' name ,7 ST, 9 EN FROM DUAL ) SELECT T.name name ,ROW_NUMBER()OVER(PARTITION BY T.name ORDER BY 1)+T.ST-1 RN FROM T CONNECT BY LEVEL <= (T.EN-T.ST+1) AND T.name = PRIOR T.name AND PRIOR SYS_GUID() IS NOT NULL ;



posted on 2014-10-07 22:09 小kiss 閱讀(...) 評論(...) 編輯 收藏

轉載于:https://www.cnblogs.com/kissdb/p/4009910.html

總結

以上是生活随笔為你收集整理的sql优化点整理的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

丁香六月色 | 在线观看涩涩 | 欧美色图30p | 国产又粗又猛又黄又爽视频 | 麻豆传媒在线免费看 | 97国产精品视频 | 欧美日在线 | 久久91久久久久麻豆精品 | 99婷婷 | 国产在线国偷精品产拍免费yy | www激情久久 | 又爽又黄又无遮挡网站动态图 | 在线国产日韩 | 国产日本亚洲高清 | 国产精品18久久久久vr手机版特色 | 91资源在线 | 免费看v片 | 精品国产_亚洲人成在线 | 中文字幕一区二区三区久久蜜桃 | 人人艹视频 | 久久中文精品视频 | 91亚洲欧美激情 | 免费毛片一区二区三区久久久 | 色之综合网 | 97在线视频观看 | 亚洲精品av在线 | 欧美极品少妇xxxxⅹ欧美极品少妇xxxx亚洲精品 | av在线免费不卡 | 99久久日韩精品免费热麻豆美女 | 婷婷国产视频 | 日韩精品一区二区三区外面 | 日韩精品一区二区三区视频播放 | 欧美一区二区三区免费观看 | 蜜臀久久99精品久久久无需会员 | 日韩在线网 | 久久综合影视 | 色九九在线 | 五月天六月婷婷 | 成人免费观看网址 | 久久精品之| 日韩精品在线免费观看 | 久久综合久久综合久久综合 | 久久福利在线 | 伊人久久av| 精品美女久久久久 | 中文字幕日韩国产 | 欧美日韩超碰 | 日韩va欧美va亚洲va久久 | 久久成人高清 | 91精品视频一区 | 国产精品嫩草影视久久久 | 国产日韩在线看 | 久久美女精品 | 黄网站免费久久 | 欧美日韩三级在线观看 | av中文字幕av | 久久99精品一区二区三区三区 | 亚洲精品美女在线 | 丰满少妇在线观看网站 | 亚洲精品在线免费播放 | 在线91av| 黄色美女免费网站 | av一区二区三区在线播放 | 中文字幕在线网 | 久久久久亚洲国产 | 激情五月婷婷网 | 久久久高清一区二区三区 | 中文字幕在线观看网址 | 欧美色噜噜噜 | 日日色综合 | 精品视频999 | 欧美一区三区四区 | 81精品国产乱码久久久久久 | 久草在线高清 | 亚洲高清视频一区二区三区 | 亚洲成av人片在线观看无 | 欧美三级高清 | av专区在线 | 亚洲视频在线免费观看 | 久久五月婷婷综合 | 国产专区一 | 在线观看日韩免费视频 | 亚洲激情在线观看 | 日韩欧美在线免费 | 国产精品女 | 久久超碰免费 | 在线观看免费日韩 | 久久久综合| 成片人卡1卡2卡3手机免费看 | 日韩久久视频 | 精品少妇一区二区三区在线 | 亚洲最快最全在线视频 | 91av电影在线观看 | 国产精品美乳一区二区免费 | av电影中文字幕在线观看 | 午夜久久影院 | 九草视频在线观看 | 五月天激情视频 | 国产最新视频在线观看 | 亚洲激精日韩激精欧美精品 | 97超碰在线久草超碰在线观看 | 天天干天天操天天干 | 三级av黄色| 国产成人一区在线 | 狠狠干2018 | 激情丁香 | 私人av| 日韩国产欧美在线播放 | 国产无遮挡猛进猛出免费软件 | 黄网站免费大全入口 | 视频国产精品 | 成人午夜片av在线看 | 天天综合网入口 | 伊人天堂av| 午夜美女视频 | 成人免费xxx在线观看 | 91av久久| 精品a在线 | 久久午夜剧场 | 五月激情视频 | 亚洲综合狠狠干 | 亚洲国产中文在线 | 日韩中文字幕免费 | 色网免费观看 | 国产精品久久久久久久av电影 | 日韩成人在线免费观看 | 国产无套精品久久久久久 | 国产成人精品久久久久 | 国产美女主播精品一区二区三区 | 日本精品一区二区 | 怡红院成人在线 | 亚州人成在线播放 | 久久线视频 | www.香蕉 | 国内精品久久久久久 | 狠狠躁夜夜躁人人爽超碰91 | 中文国产在线观看 | 中文字幕a在线 | 中文字幕中文中文字幕 | 欧美一级片免费在线观看 | 97超碰资源网 | 欧美a级免费视频 | 色av婷婷 | 色久av| 色吊丝在线永久观看最新版本 | 国产中文字幕视频在线 | v片在线看 | 欧美国产高清 | 玖玖在线看 | 99精品偷拍视频一区二区三区 | 麻豆va一区二区三区久久浪 | 日日操天天爽 | 久久久久久久久久久久影院 | 久久精品99精品国产香蕉 | 国产尤物在线 | 日韩理论电影网 | 亚洲国产成人av网 | 天天天干| 国产69精品久久久久久久久久 | 欧美一级片免费观看 | 97爱爱爱| 99国产免费网址 | 久久亚洲欧美日韩精品专区 | 热久久视久久精品18亚洲精品 | 国产精品二区在线观看 | 久久视频| 久久天堂亚洲 | 国产成人精品一区二区在线观看 | 国产香蕉视频 | 色噜噜狠狠狠狠色综合久不 | 久草视频在线免费播放 | 免费在线观看日韩欧美 | av中文字幕在线免费观看 | 免费视频三区 | 午夜精品久久久久久久99无限制 | wwxxx日本| 国产一级视频免费看 | 色婷婷成人网 | 亚洲美女视频在线 | 在线 视频 一区二区 | 国产成人精品一区一区一区 | 国产中文 | 久久毛片视频 | 亚洲永久字幕 | 欧美先锋影音 | 久久不卡视频 | a级国产片 | 人人舔人人射 | 久久免费福利 | 中文字幕在线观看视频一区 | 婷婷亚洲综合五月天小说 | 91桃色视频| 亚洲国产一区二区精品专区 | 久久综合久色欧美综合狠狠 | 中文在线免费观看 | 天堂在线v | 午夜在线免费观看视频 | 免费视频久久久久久久 | 婷婷伊人综合 | 久久91久久久久麻豆精品 | 国产色综合天天综合网 | 在线不卡中文字幕播放 | 免费麻豆| 99热在线网站 | 91精品影视 | 欧洲成人免费 | 久久伊人色综合 | 91免费版在线观看 | 国产精品video爽爽爽爽 | 日本动漫做毛片一区二区 | 亚洲欧美日韩一区二区三区在线观看 | av一区二区在线观看中文字幕 | 又黄又刺激的网站 | 国产剧情一区二区 | 在线观看的a站 | 日韩欧美精品一区二区 | 色91av| 国产福利一区二区三区在线观看 | 视频91 | 成人国产精品免费 | 在线观看视频黄 | 这里只有精品视频在线观看 | 久草精品在线观看 | 亚洲精品视频免费在线观看 | 国产精品成人品 | 亚洲综合欧美激情 | 在线看黄网站 | 成人av电影免费在线播放 | 2024av| 欧美精品国产综合久久 | 狠狠躁天天躁 | 字幕网资源站中文字幕 | 久久精品99精品国产香蕉 | 精品久久久久久久久久岛国gif | 国产视频亚洲视频 | 国产馆在线播放 | 91在线超碰 | 欧美一级片在线免费观看 | 亚洲国产精品电影 | 人人爽人人| 亚洲精品国产综合久久 | 色多多在线观看 | 欧美另类美少妇69xxxx | 亚洲免费不卡 | 日本久久影视 | 日韩午夜精品福利 | 天天干天天天天 | 丁香一区二区 | 91精品视频在线播放 | 中文字幕在线视频一区 | 91入口在线观看 | 日韩欧美一级二级 | 不卡精品视频 | 久久99九九99精品 | 亚洲午夜av | 天天亚洲 | 久久综合射 | 国产精品久久9 | 免费视频色 | 国产精品成人a免费观看 | 91成品视频 | 欧美在线你懂的 | 在线亚洲播放 | 亚洲国产日韩精品 | 91av欧美| 天天爱综合 | 久久综合激情 | 亚洲人成人99网站 | 六月色丁香 | 97色在线观看 | 国产精品久久久久久久久久新婚 | 狠狠狠狠干 | 激情xxxx| 99热9 | 成人av中文字幕 | 国产视频资源在线观看 | 国产精品久久9 | 日日干干夜夜 | 瑞典xxxx性hd极品 | 日韩久久精品一区二区 | 亚洲国产日韩欧美在线 | 国产一区在线精品 | 欧美成亚洲 | 久久精品免费电影 | 天天搞夜夜骑 | 国产高清视频在线免费观看 | 日本三级中文字幕在线观看 | 免费在线观看av网站 | 国产91综合一区在线观看 | 色香蕉网 | 91精品伦理 | 六月丁香婷婷网 | 国产一区二区网址 | 精品视频一区在线 | 成人av电影免费在线观看 | 99爱精品视频| 天天插日日插 | 一本一本久久a久久精品综合妖精 | 欧美日韩精品二区第二页 | 国产精品欧美一区二区 | 成人在线免费视频 | 国产亚洲精品美女 | 国产一区在线不卡 | 日韩电影在线观看中文字幕 | 久久综合狠狠综合久久狠狠色综合 | 91亚洲精品乱码久久久久久蜜桃 | 午夜在线观看影院 | 亚洲午夜久久久久久久久久久 | 午夜av网站 | 国产999视频在线观看 | 国产一级精品视频 | 日韩精品一区二区三区高清免费 | 午夜av免费观看 | 最近免费中文字幕 | 国产精品麻豆91 | 精品国产乱码一区二 | 成人一区二区三区在线 | 久久国产91 | 91成年人网站 | 久久成人资源 | 欧美日韩免费视频 | 久久久av电影 | 在线成人中文字幕 | 日韩动漫免费观看高清完整版在线观看 | 国产综合福利在线 | 特级西西www44高清大胆图片 | 色99网| 激情综合网色播五月 | 狠狠干.com | 中文字幕xxxx | 精品视频在线免费观看 | 亚洲第一中文字幕 | 国产精品对白一区二区三区 | 亚洲国产三级在线 | 91在线精品秘密一区二区 | 六月婷婷网 | 国产精品va最新国产精品视频 | 国产69精品久久久久久久久久 | 久久最新网址 | 国产码电影| av久久久| 午夜精品视频一区 | 亚洲欧美婷婷六月色综合 | 国产成人一区二 | 99在线热播| 蜜桃视频日韩 | 综合激情网... | 四虎国产视频 | 日韩天天操 | 激情五月婷婷综合网 | 91丨精品丨蝌蚪丨白丝jk | 久久久免费高清视频 | 一区二区精品视频 | 手机av在线不卡 | 成人黄色毛片视频 | 精品国产一区二区三区噜噜噜 | 五月开心综合 | 婷婷久久久久 | 中文字幕丝袜美腿 | 亚洲视频 视频在线 | 国产aa精品 | 美女免费黄网站 | 视频国产一区二区三区 | 超薄丝袜一二三区 | 中文字幕 国产精品 | 精品国产一区二区三区在线观看 | 麻豆视频国产精品 | 在线精品国产 | 麻花豆传媒一二三产区 | 国产高清免费视频 | 五月天激情视频在线观看 | 一二三区av | 色五月色开心色婷婷色丁香 | 成人夜晚看av | 欧美另类亚洲 | 99久久网站 | 精品久久五月天 | 99热国产在线中文 | 久久久免费看 | 国产成人av福利 | 免费精品视频在线 | 亚洲天堂精品视频在线观看 | 午夜影院一级片 | www久久久久 | 中文字幕免费不卡视频 | 六月色播 | 国产99在线播放 | 成人三级网址 | 国产午夜小视频 | 天堂av在线网站 | 亚洲国产高清在线观看视频 | 7777xxxx| 伊在线视频 | 国产在线观看午夜 | 激情欧美丁香 | 狠狠色狠狠色合久久伊人 | 福利网址在线观看 | 97偷拍在线视频 | 视频在线观看国产 | 日韩电影一区二区在线 | 国产97在线观看 | 91在线视频播放 | 国产精品毛片久久久久久久久久99999999 | 人人爱夜夜操 | 99视频免费 | 丝袜av一区 | 在线观看国产亚洲 | 久久亚洲影院 | 九九热免费在线视频 | 国产69精品久久久久99 | 一区二区不卡视频在线观看 | 欧美视频日韩视频 | 成人欧美在线 | 色综合天天色 | 日韩欧美在线综合网 | 中文字幕在线影院 | 精品九九九 | 视频一区二区国产 | 一区二区三区影院 | 狠狠色丁香婷婷综合久小说久 | 夜夜夜夜爽 | 久久亚洲精品国产亚洲老地址 | 色网站国产精品 | 精品日韩在线一区 | 国产精品第一页在线观看 | 国产一线二线三线性视频 | 在线观看中文字幕网站 | 国产精品美乳一区二区免费 | 国产精品一区二区果冻传媒 | 91大神在线观看视频 | 97国产大学生情侣白嫩酒店 | 超碰成人免费电影 | 国产伦理一区二区 | 久草视频在线新免费 | www免费看| 免费的黄色av | 欧美日韩一区二区三区不卡 | 亚洲专区路线二 | 亚洲精品网址在线观看 | 国产精品久久久久久久久久久久午夜 | 久久免费视频这里只有精品 | 最近中文字幕在线中文高清版 | 97精品国自产拍在线观看 | 久久久久久久久久久久国产精品 | 97碰在线 | 国产精品国产自产拍高清av | 久久久精品国产免费观看同学 | 一区二区欧美激情 | 最新av电影网站 | 久久国产精品久久国产精品 | 欧美午夜精品久久久久 | 亚洲精品乱码久久久久v最新版 | 狠狠狠色丁香综合久久天下网 | 欧美福利精品 | 久久公开免费视频 | 在线高清一区 | 婷婷亚洲综合五月天小说 | 亚洲资源在线观看 | 99久久夜色精品国产亚洲 | 日产乱码一二三区别在线 | 天天综合操 | 黄色影院在线播放 | 综合网天天色 | 五月婷婷综合在线 | 国产免费高清视频 | 在线亚洲人成电影网站色www | 日本黄色大片儿 | 成人国产网站 | 久久艹国产视频 | 五月婷婷丁香在线观看 | 日韩一二三| 国产日韩欧美在线看 | 伊人久久五月天 | 五月婷综合 | 国产流白浆高潮在线观看 | 久久综合五月天 | 92精品国产成人观看免费 | 欧美激情精品久久久久久免费 | 日韩大片在线观看 | 色婷婷久久一区二区 | 91麻豆精品国产自产在线 | 91成年人在线观看 | 久久综合干 | 国产成人精品午夜在线播放 | 夜色成人av | 日韩欧美极品 | 激情黄色一级片 | 免费看一级片 | 久久爱资源网 | 亚欧洲精品视频在线观看 | 日日骑| 国产小视频在线免费观看 | 国产成人亚洲在线电影 | 亚洲一区 影院 | 国产精品美女久久久免费 | 国内精品免费 | 久草免费电影 | 最新av在线播放 | 日韩精品免费一区 | 久久久久久久久久久网 | 成人av在线电影 | 射综合网| 国产无遮挡猛进猛出免费软件 | 久草免费福利在线观看 | 日韩美精品视频 | 久草色在线观看 | 在线免费色 | 人人涩| 一级欧美一级日韩 | 国产福利精品视频 | 欧美日韩国产欧美 | 久久人人爽人人片 | 免费色黄 | 男女激情网址 | 欧洲亚洲精品 | 美女网站色 | 免费看日韩 | www黄在线| 日韩免费观看一区二区三区 | 久久伦理影院 | 亚洲欧美经典 | 一区二区电影网 | 激情丁香| 欧美网站黄色 | 久久免费看av | 日韩欧美高清免费 | 色无五月| 亚洲欧洲精品一区二区精品久久久 | 国外成人在线视频网站 | 美女网站免费福利视频 | 97在线超碰| 97视频播放 | 久99精品| 国内精品久久久久久久97牛牛 | 婷婷日 | 日韩精品视频在线免费观看 | 精品色综合 | 蜜臀av一区二区 | www.久久视频 | 国产特级毛片aaaaaa高清 | 免费黄色av| 色综合五月天 | 日韩在线观看免费 | 在线免费看黄网站 | 成人va天堂 | 波多野结衣视频在线 | 久久高清免费观看 | 国产精品中文久久久久久久 | 中文字幕第一 | 亚洲人成综合 | 天天艹 | 黄色成人影视 | 国产中文字幕视频在线观看 | 亚洲免费资源 | 欧洲一区二区三区精品 | 一区二区三区不卡在线 | 亚洲在线网址 | 99热免费在线 | 日韩成人精品一区二区 | 麻豆一区在线观看 | 九九免费观看视频 | 91在线看免费 | 欧美一二区在线 | 国产精品v欧美精品v日韩 | 98超碰在线 | 国产亚洲精品久久久久久 | 九九久久精品 | 亚洲一区二区天堂 | 91热这里只有精品 | 久草在线网址 | 亚洲国产美女精品久久久久∴ | 在线看v片| 偷拍精品一区二区三区 | 手机在线看片日韩 | 97在线观视频免费观看 | 综合在线亚洲 | 狠狠操.com| 最近中文字幕国语免费av | 日韩精品中字 | 久草在线官网 | 日韩中文字幕在线看 | 人人插人人费 | 欧美日本日韩aⅴ在线视频 插插插色综合 | 国产精品99久久久久久宅男 | 国产在线黄| 日批视频 | 欧美巨乳网| 99热国产在线中文 | 久久精品8 | 国产中年夫妇高潮精品视频 | 国产免费久久 | 婷婷网在线 | 亚洲伊人婷婷 | 国产一区国产二区在线观看 | 久草在线这里只有精品 | 中文字幕亚洲欧美日韩 | 国产女做a爱免费视频 | 国内成人精品2018免费看 | 成人av亚洲 | 日本黄色一级电影 | 在线日韩中文 | 九色视频网 | 日韩免费一级电影 | 激情欧美一区二区三区免费看 | 另类五月激情 | 99久久久久久国产精品 | 91久久奴性调教 | 亚洲成av人影片在线观看 | 最新日韩中文字幕 | 综合在线色 | 一区二区三区 亚洲 | a成人v | 97精产国品一二三产区在线 | 在线影院av | 91精品一区二区三区蜜臀 | 欧美少妇xx| 亚洲一区二区三区在线看 | 99欧美精品 | 色婷婷国产在线 | 婷婷日日| 欧美一性一交一乱 | 久久不见久久见免费影院 | 在线三级av | 婷婷久草 | 久久国产精品99久久久久久老狼 | 色瓜 | 久久欧美综合 | 婷婷丁香自拍 | 一区二区三区在线观看免费 | 久草在线91| 99精品国产一区二区三区麻豆 | 91人人澡人人爽人人精品 | 99久久精品国产观看 | 国产精品久久久久久一区二区三区 | 中文字幕频道 | 久草在线观 | 亚洲日韩欧美一区二区在线 | 亚洲高清视频一区二区三区 | 亚洲欧美视频一区二区三区 | 日韩视频精品在线 | 日韩精品免费一区二区三区 | 狠狠狠色丁香综合久久天下网 | 亚洲激情小视频 | 日韩欧美视频免费在线观看 | 国产精品一区二区三区在线免费观看 | 成人在线免费看视频 | 欧美精品乱码久久久久久按摩 | 成人精品999 | 久久三级视频 | 欧美人牲 | 久久怡红院 | 久久深夜福利免费观看 | 色福利网站 | 91福利在线观看 | 亚洲精品乱码久久久一二三 | 成人va视频 | 国产在线观看中文字幕 | 亚洲精品免费在线观看视频 | 美女在线观看网站 | av福利网址导航 | 日日天天狠狠 | 在线免费观看羞羞视频 | 国产精品99久久久精品 | 国语精品久久 | 久久在线观看视频 | 在线看黄色的网站 | 国产精品爽爽久久久久久蜜臀 | 国产一区二区在线免费播放 | 久久久久免费精品视频 | 国产黄色精品在线 | a天堂在线看 | 精品久久久久久综合日本 | 欧美日韩国产在线精品 | 色综合久久久 | 成年人在线观看视频免费 | 欧美日韩高清一区二区 国产亚洲免费看 | 久久国产女人 | 亚洲精品美女久久17c | 婷婷国产一区二区三区 | 日韩高清在线看 | 日韩一级精品 | 五月亚洲综合 | 91视频电影 | 激情欧美一区二区三区免费看 | 人人爽爽人人 | 日本最新一区二区三区 | 日韩欧美久久 | 亚洲午夜在线视频 | 亚洲激情在线观看 | 看黄色91| 在线观看色网 | 亚洲最新视频在线播放 | 亚洲精品国产精品久久99热 | 国产免费美女 | 国产在线观看二区 | 国产美女网站视频 | 国产精品一区在线观看你懂的 | 成人免费在线观看av | 国产一区不卡在线 | 91网免费观看 | 亚洲黄色av | 成人国产精品入口 | 中文字幕人成不卡一区 | 欧美三人交 | 五月婷婷丁香激情 | 国产一级黄大片 | 欧美成人一区二区 | 国产中文视频 | 久久久免费观看 | 久久国产精品成人免费浪潮 | www.国产在线观看 | 成人毛片a | 成人免费一区二区三区在线观看 | 天天操夜夜操国产精品 | 婷婷色网 | 国精产品999国精产 久久久久 | 麻豆一精品传二传媒短视频 | 尤物九九久久国产精品的分类 | 你操综合 | 日韩精品一区二区三区在线播放 | 成人香蕉视频 | 久久久www成人免费精品张筱雨 | 久草在线手机观看 | av资源网在线播放 | 久久99精品久久只有精品 | 久久影院精品 | 婷婷精品在线 | 在线精品视频免费播放 | 成人午夜免费剧场 | 国产精品一区二区av日韩在线 | 日日干夜夜操视频 | 欧美视频在线观看免费网址 | 免费在线观看一区 | 国产在线免费观看 | 成人一区二区三区中文字幕 | 最近中文字幕免费 | adc在线观看 | 亚洲人视频在线 | 亚洲精品久久久久中文字幕二区 | 中文字幕视频一区 | 99久免费精品视频在线观看 | 999在线精品| 天天透天天插 | 国产精品免费观看久久 | 久久免费高清视频 | 欧美日韩国产二区三区 | 91av视频在线播放 | 成人日批视频 | 午夜电影久久久 | 香蕉视频免费在线播放 | 韩国av免费 | 中文 一区二区 | av在线之家电影网站 | 免费视频一二三 | 在线 视频 一区二区 | 日韩av在线影视 | 日韩网站在线播放 | 久久久久久久精 | 九九热精品国产 | 亚洲无毛专区 | 夜色.com | 国产精品久久久久久久久费观看 | 91日韩在线视频 | 色婷婷免费 | 精品乱码一区二区三四区 | 国产97av| 国产日产欧美在线观看 | 美女露久久 | 五月婷婷六月丁香激情 | 日本黄色免费在线观看 | 午夜精品麻豆 | 中文一区在线观看 | 久久中文欧美 | 亚洲成人999 | 久久av电影 | 久久精品综合网 | 免费久久网 | 亚洲精品国产精品国自产观看 | 国产午夜在线观看视频 | 免费av小说 | 六月色播 | 成人av电影免费在线观看 | 午夜av在线电影 | 国产91影院| 日韩欧美高清视频在线观看 | 99久久精品免费看国产四区 | 97在线观看免费观看 | 久久 在线| 国产精品h在线观看 | 日韩欧美精品在线视频 | 在线观看国产亚洲 | 国产精品99久久久久久有的能看 | 亚洲国产最新 | 国产精品精品国产婷婷这里av | 国产高清视频免费最新在线 | 国产精品爽爽久久久久久蜜臀 | 色综合久久中文综合久久牛 | 久久在线免费视频 | 激情久久网| 亚洲国产日韩一区 | 99热在 | 中文在线字幕观看电影 | 欧美一级黄大片 | 婷婷色五 | 精品在线观看一区二区 | 亚洲免费成人 | 亚洲精品久久在线 | 久久视频中文字幕 | 99久久精品久久久久久动态片 | 国产午夜三级 | 免费观看的av | 中文字幕观看av | 国产亚洲精品久久久网站好莱 | 色婷婷啪啪免费在线电影观看 | 五月激情片 | 国产精品久久影院 | 99精品成人 | 久久精品久久99精品久久 | 欧美在线视频一区二区三区 | 99日韩精品 | 色综合久久天天 | 人人插人人费 | 一级黄色电影网站 | 日韩在线三级 | 亚洲乱亚洲乱妇 | 少妇18xxxx性xxxx片 | 在线观看日韩av | 亚洲.www | 天天干天天摸 | 国产精品欧美久久久久天天影视 | 女女av在线 | 日韩动漫免费观看高清完整版在线观看 | 午夜精品久久 | 成人免费视频网 | 91久久丝袜国产露脸动漫 | 在线观看网站黄 | 久久理论电影 | 伊人久久电影网 | 婷婷在线网站 | 九九导航| 国产精品黑丝在线观看 | 黄色国产在线观看 | 欧美与欧洲交xxxx免费观看 | 日韩一区二区三 | 免费的国产精品 | 久久99精品波多结衣一区 | 国产一区黄色 | 国产免费av一区二区三区 | 国产成人高清av | 中文字幕久久网 | 欧美成人区 | 九九免费在线观看视频 | 国产成人精品一二三区 | av线上免费看 | 国产精品福利无圣光在线一区 | 亚洲免费在线看 | 国语黄色片| 成人影音av| 91精品国| 色综合久久久久综合99 | 97精品国产一二三产区 | 久草免费福利在线观看 | 深爱综合网 | 日韩av男人的天堂 | 国产精品免费一区二区 | 国产日韩精品久久 | 成人在线网站观看 | av在线播放亚洲 | 亚洲精品自在在线观看 | 黄色app网站在线观看 | 久久精品国产免费看久久精品 | 日韩欧美xx | 日本中文字幕网址 | 久久精品视频在线免费观看 | 精品国产乱码久久久久久1区二区 | 国产一区91 | 久久精品精品电影网 | 免费a一级 | 黄色小说视频网站 | 成人看片 | 国产又粗又猛又爽又黄的视频先 | 中文字幕 在线 一 二 | 国产九色视频在线观看 | av一级片 | a视频免费看 | 国产一区二区精品 | 久草在线视频首页 | 中文av在线免费观看 | 在线观看视频h | 五月婷婷激情六月 | 99视频黄| 中文字幕在线观看网站 | av一区二区在线观看中文字幕 | 中文字幕资源网 国产 | 成人一级片免费看 | 亚洲精品18日本一区app | 久久久久影视 | 狠狠久久 | av资源免费看 | 亚洲欧美国产视频 | 天天天天爱天天躁 | 精品国偷自产国产一区 | 久久精品三 | 五月激情丁香图片 | 女人18毛片a级毛片一区二区 | 精品国产一区二区三区在线观看 | 亚洲激情一区二区三区 | 欧美精品在线观看免费 | 国产视频久| 亚洲精品美女久久17c | 国产精品一区二区在线观看免费 | 91亚洲精品久久久蜜桃 | 久草视频网 | 182午夜在线观看 | 欧美日韩一级久久久久久免费看 | 久久久久人人 | 久久看毛片 | 国产午夜影院 | 干干日日| 久久精品久久国产 | 五月婷婷毛片 | 久色免费视频 | 国产一级一片免费播放放 | 国产va在线观看免费 | 国产香蕉视频在线播放 | 欧洲亚洲国产视频 | 中午字幕在线观看 | 超级碰碰碰免费视频 | 国产成人精品一区二三区 | 日本99干网 | 色综合a| 探花视频在线观看免费版 | 国产一区国产二区在线观看 | 91视频在线观看下载 | 毛片无卡免费无播放器 | 欧美 日韩 久久 | 免费精品国产 | 中文字幕在线看视频 | 91精品国产一区 | 视频一区二区三区视频 | 日韩三级视频在线看 | 成人黄色中文字幕 | 天天色天天艹 | 超碰97国产精品人人cao | 黄色一二级片 | 亚洲一级黄色大片 | 国产99中文字幕 | 免费观看一级一片 | 中文字幕视频观看 | 99久久夜色精品国产亚洲 | 日韩高清成人在线 | 99久久精品国产毛片 | 日韩网站在线播放 | 99久久综合精品五月天 | 日韩免费看视频 | 91免费国产在线观看 | 欧美一二三区播放 | 91最新国产 | 国产成人一区在线 | 日韩黄色免费 | 一本一本久久a久久 | 国产精品高清免费在线观看 | 国产一区二区三区高清播放 | 免费能看的av | 一级片视频免费观看 | 一本一道波多野毛片中文在线 | 亚洲精品影院在线观看 | 麻豆视频免费入口 | 一区二区精品视频 | 日本精品一区二区在线观看 | jizz18欧美18| 欧美日韩国产精品一区二区 | 激情五月av | 精品久久综合 | 精品美女久久久久久免费 | 亚洲一区动漫 | 999久久久欧美日韩黑人 | 欧美日韩一区二区在线观看 | 丝袜制服综合网 | 国产亚洲激情视频在线 | 2023亚洲精品国偷拍自产在线 | 国产偷v国产偷∨精品视频 在线草 | 日韩二区在线 | 亚洲电影久久久 | 精品96久久久久久中文字幕无 | 麻豆视传媒官网免费观看 | a级国产乱理论片在线观看 特级毛片在线观看 | www亚洲视频 | 日韩免费av片 | 黄色免费高清视频 | 午夜精品在线看 | 欧美国产亚洲精品久久久8v | aaaaaa毛片 | 99操视频 | 免费一级片在线 | 国产一区二区三区免费观看视频 | 日韩一级电影网站 | 狠狠五月天 |