精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

國產(chǎn)集中庫SQL能力評測 - 視圖

原創(chuàng)
數(shù)據(jù)庫 其他數(shù)據(jù)庫
對于存在復(fù)雜視圖的查詢,優(yōu)化器可以有兩種方式來優(yōu)化查詢。一是創(chuàng)建一個用于聚集視圖合并結(jié)果集,并把這個結(jié)果集連接到基表中;另一個是展開視圖連接兩個基表并聚集這些連接。

這里談?wù)勔晥D。視圖其實就是一條查詢 SQL 語句,用于顯示一個或多個表或其他視圖中的相關(guān)數(shù)據(jù)。視圖將一個查詢的結(jié)果作為一個表來使用,因此視圖可以被看作是存儲的查詢或一個虛擬表。視圖來源于表,所有對視圖數(shù)據(jù)的修改最終都會被反映到視圖的基表中,這些修改必須服從基表的完整性約束,并同樣會觸發(fā)定義在基表上的觸發(fā)器。與表不同,視圖不會要求分配存儲空間,視圖中也不會包含實際的數(shù)據(jù)。視圖只是定義了一個查詢,視圖中的數(shù)據(jù)是從基表中獲取,這些數(shù)據(jù)在視圖被引用時動態(tài)的生成。由于視圖基于數(shù)據(jù)庫中的其他對象,因此一個視圖只需要占用數(shù)據(jù)字典中保存其定義的空間,而無需額外的存儲空間。

1. 視圖概述

1).視圖作用

用戶可以通過視圖以不同形式來顯示基表中的數(shù)據(jù),視圖的強大之處在于它能夠根據(jù)不同用戶的需要來對基表中的數(shù)據(jù)進行整理。視圖常見的用途如下:

  • 提供額外數(shù)據(jù)訪問安全,通過對用戶設(shè)置視圖訪問權(quán)限,約束用戶訪問指定的行或列。
  • 隱藏數(shù)據(jù)復(fù)雜性,例如視圖可將由多個表組成的查詢封裝為新的數(shù)據(jù)集,屏蔽其內(nèi)部復(fù)雜性。
  • 簡化用戶的SQL語句,復(fù)雜內(nèi)部邏輯通過視圖來封裝。
  • 隔離應(yīng)用與數(shù)據(jù)表,可讓應(yīng)用不受表定義變更的影響進而可封裝基表數(shù)據(jù)展現(xiàn),使得應(yīng)用程序與數(shù)據(jù)庫表在一定程度上獨立。

2).視圖分類

簡單視圖能夠被查詢優(yōu)化器較好地處理,但是復(fù)雜視圖不能被查詢優(yōu)化器很好地處理。一些商業(yè)數(shù)據(jù)庫,如Oracle,提供了一些視圖的優(yōu)化技術(shù),如"復(fù)雜視圖合并"、"物化視圖查詢重寫"等。但從整體上看,復(fù)雜視圖優(yōu)化技術(shù)還有待繼續(xù)提高。

圖片圖片

2. 視圖優(yōu)化

1).優(yōu)化手段

視圖合并

對于存在復(fù)雜視圖的查詢,優(yōu)化器可以有兩種方式來優(yōu)化查詢。一是創(chuàng)建一個用于聚集視圖合并結(jié)果集,并把這個結(jié)果集連接到基表中;另一個是展開視圖連接兩個基表并聚集這些連接。為了把視圖查詢合并到讀取查詢中,優(yōu)化器將讀取查詢中所使用視圖的名字替換為原始表名字,并把視圖查詢WHERE條件中的查詢條件添加到讀取查詢的WHERE條件中去。需要強調(diào)的是該合并中是以讀取查詢?yōu)榛鶞剩窗岩晥D查詢中的對應(yīng)查詢條件合并到讀取查詢中去。如果在讀取查詢語句中存在大量可以縮減查詢范圍的查詢條件,且將這些查詢條件添加到視圖中可以縮減整體的數(shù)據(jù)處理量。

條件推入

在無法執(zhí)行視圖合并的情況下,將讀取查詢中的查詢條件推入到視圖查詢中去。

視圖重寫

視圖重寫就是將對視圖的引用重寫為對基本表的引用。視圖重寫后的SQL多被子查詢進行進一步優(yōu)化。

2).Oracle 視圖優(yōu)化

-- 視圖合并SQL> create view v_emp_group_by_deptas select dept_id,avg(salary) avg_sal,min(salary) min_sal,max(salary) max_salfrom empgroup by dept_id;
SQL> select d.dept_name,v.avg_salfrom dept d,v_emp_group_by_dept vwhere d.dept_id=v.dept_id and v.dept_id<20;-----------------------------------------------------------------------------------------| Id  | Operation                     | Name    | Rows  | Bytes | Cost (%CPU)| Time     |-----------------------------------------------------------------------------------------|   0 | SELECT STATEMENT              |         |   242 |  5808 |    19  (11)| 00:00:01 ||   1 |  HASH GROUP BY                |         |   242 |  5808 |    19  (11)| 00:00:01 ||*  2 |   HASH JOIN                   |         |   351 |  8424 |    18   (6)| 00:00:01 ||   3 |    TABLE ACCESS BY INDEX ROWID| DEPT    |    19 |   285 |     2   (0)| 00:00:01 ||*  4 |     INDEX RANGE SCAN          | DEPT_PK |    19 |       |     1   (0)| 00:00:01 ||*  5 |    TABLE ACCESS FULL          | EMP     |  1827 | 16443 |    15   (0)| 00:00:01 |-----------------------------------------------------------------------------------------
SQL> alter session set "_complex_view_merging"=false;通過隱含參數(shù),禁止復(fù)雜視圖合并功能。
SQL> select d.dept_name,v.avg_salfrom dept d,v_emp_g  2  roup_by_dept vwhere d.dept_id=v.dept_id and v.d  3  ept_id<20;----------------------------------------------------------------------------------------------------| Id  | Operation                    | Name                | Rows  | Bytes | Cost (%CPU)| Time     |----------------------------------------------------------------------------------------------------|   0 | SELECT STATEMENT             |                     |    17 |   612 |    19  (11)| 00:00:01 ||*  1 |  HASH JOIN                   |                     |    17 |   612 |    19  (11)| 00:00:01 ||   2 |   VIEW                       | V_EMP_GROUP_BY_DEPT |    18 |   468 |    16   (7)| 00:00:01 ||   3 |    HASH GROUP BY             |                     |    18 |   162 |    16   (7)| 00:00:01 ||*  4 |     TABLE ACCESS FULL        | EMP                 |  1827 | 16443 |    15   (0)| 00:00:01 ||   5 |   TABLE ACCESS BY INDEX ROWID| DEPT                |    19 |   190 |     2   (0)| 00:00:01 ||*  6 |    INDEX RANGE SCAN          | DEPT_PK             |    19 |       |     1   (0)| 00:00:01 |----------------------------------------------------------------------------------------------------
--條件推入SQL> select * from V_EMP_GROUP_BY_DEPT where dept_id<5;-------------------------------------------------------------------------------------------| Id  | Operation           | Name                | Rows  | Bytes | Cost (%CPU)| Time     |-------------------------------------------------------------------------------------------|   0 | SELECT STATEMENT    |                     |     3 |   156 |    16   (7)| 00:00:01 ||   1 |  VIEW               | V_EMP_GROUP_BY_DEPT |     3 |   156 |    16   (7)| 00:00:01 ||   2 |   HASH GROUP BY     |                     |     3 |    27 |    16   (7)| 00:00:01 ||*  3 |    TABLE ACCESS FULL| EMP                 |   317 |  2853 |    15   (0)| 00:00:01 |-------------------------------------------------------------------------------------------Predicate Information (identified by operation id):---------------------------------------------------   3 - filter("DEPT_ID"<5)提前在表掃描中進行了過濾
--視圖重寫SQL> create view v_emp_dept10 as select * from emp where dept_id=10;SQL> select * from v_emp_dept10 where salary<1200;--------------------------------------------------------------------------| Id  | Operation         | Name | Rows  | Bytes | Cost (%CPU)| Time     |--------------------------------------------------------------------------|   0 | SELECT STATEMENT  |      |    18 |   504 |    15   (0)| 00:00:01 ||*  1 |  TABLE ACCESS FULL| EMP  |    18 |   504 |    15   (0)| 00:00:01 |--------------------------------------------------------------------------Predicate Information (identified by operation id):---------------------------------------------------   1 - filter("DEPT_ID"=10 AND "SALARY"<1200)

3. 國產(chǎn)庫視圖優(yōu)化評測

1)整體情況

下面是針對上述測例,國產(chǎn)庫的行為如何?先來看看整體結(jié)果

圖片圖片

2)國產(chǎn)庫評測

MySQL

--視圖合并mysql> create view v_emp_group_by_dept    -> as select dept_id,avg(salary) avg_sal,min(salary) min_sal,max(salary) max_sal    -> from emp    -> group by dept_id;
mysql> explain select d.dept_name,v.avg_sal    -> from dept d,v_emp_group_by_dept v    -> where d.dept_id=v.dept_id and v.dept_id<20;+----+-------------+------------+------------+-------+---------------+---------------+---------+------------------+-------+----------+------------------------------+| id | select_type | table      | partitions | type  | possible_keys | key           | key_len | ref              | rows  | filtered | Extra                        |+----+-------------+------------+------------+-------+---------------+---------------+---------+------------------+-------+----------+------------------------------+|  1 | PRIMARY     | d          | NULL       | index | PRIMARY       | idx_dept_name | 103     | NULL             |   100 |   100.00 | Using index                  ||  1 | PRIMARY     | <derived2> | NULL       | ref   | <auto_key0>   | <auto_key0>   | 5       | testdb.d.dept_id |    33 |   100.00 | NULL                         ||  2 | DERIVED     | emp        | NULL       | ALL   | NULL          | NULL          | NULL    | NULL             | 10117 |    33.33 | Using where; Using temporary |+----+-------------+------------+------------+-------+---------------+---------------+---------+------------------+-------+----------+------------------------------+
--條件推入mysql> explain select * from v_emp_group_by_dept where dept_id<5;+----+-------------+------------+------------+------+---------------+------+---------+------+-------+----------+------------------------------+| id | select_type | table      | partitions | type | possible_keys | key  | key_len | ref  | rows  | filtered | Extra                        |+----+-------------+------------+------------+------+---------------+------+---------+------+-------+----------+------------------------------+|  1 | PRIMARY     | <derived2> | NULL       | ALL  | NULL          | NULL | NULL    | NULL |  3371 |   100.00 | NULL                         ||  2 | DERIVED     | emp        | NULL       | ALL  | NULL          | NULL | NULL    | NULL | 10117 |    33.33 | Using where; Using temporary |+----+-------------+------------+------------+------+---------------+------+---------+------+-------+----------+------------------------------+2 rows in set, 1 warning (0.00 sec)
mysql> show warnings;+-------+------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+| Level | Code | Message                                                                                                                                     |+-------+------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+| Note  | 1003 | /* select#1 */ select `testdb`.`v_emp_group_by_dept`.`dept_id` AS `dept_id`,`testdb`.`v_emp_group_by_dept`.`avg_sal` AS `avg_sal`,`testdb`.`v_emp_group_by_dept`.`min_sal` AS `min_sal`,`testdb`.`v_emp_group_by_dept`.`max_sal` AS `max_sal` from `testdb`.`v_emp_group_by_dept` |+-------+------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
--視圖重寫mysql> create view v_emp_dept10 as select * from emp where dept_id=10;
mysql> explain select * from v_emp_dept10 where salary<1200;+----+-------------+-------+------------+------+----------------+------+---------+------+-------+----------+-------------+| id | select_type | table | partitions | type | possible_keys  | key  | key_len | ref  | rows  | filtered | Extra       |+----+-------------+-------+------------+------+----------------+------+---------+------+-------+----------+-------------+|  1 | SIMPLE      | emp   | NULL       | ALL  | idx_emp_salary | NULL | NULL    | NULL | 10117 |     1.31 | Using where |+----+-------------+-------+------------+------+----------------+------+---------+------+-------+----------+-------------+1 row in set, 1 warning (0.01 sec)
mysql> show warnings;+-------+------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+| Level | Code | Message+-------+------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+| Note  | 1003 | /* select#1 */ select `testdb`.`emp`.`emp_id` AS `emp_id`,`testdb`.`emp`.`dept_id` AS `dept_id`,`testdb`.`emp`.`emp_name` AS `emp_name`,`testdb`.`emp`.`birthday` AS `birthday`,`testdb`.`emp`.`salary` AS `salary` from `testdb`.`emp` where ((`testdb`.`emp`.`dept_id` = 10) and (`testdb`.`emp`.`salary` < 1200)) |+-------+------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+

DM

--視圖合并SQL> create view v_emp_group_by_deptas select dept_id,avg(salary) avg_sal,min(salary) min_sal,max(salary) max_salfrom empgroup by dept_id;
SQL> explain select d.dept_name,v.avg_salfrom dept d,v_emp_group_by_dept vwhere d.dept_id=v.dept_id and v.dept_id<20;1   #NSET2: [3, 94, 150]2     #PRJT2: [3, 94, 150]; exp_num(2), is_atom(FALSE)3       #HAGR2: [3, 94, 150]; grp_num(3), sfun_num(1), distinct_flag[0]; slave_empty(0) keys(EMP.DEPT_ID, D.DEPT_NAME, D.ROWID) ; real_keys(1)4         #HASH2 INNER JOIN: [2, 495, 150]; LKEY_UNIQUE KEY_NUM(1); KEY(D.DEPT_ID=EMP.DEPT_ID) KEY_NULL_EQU(0)5           #BLKUP2: [1, 19, 90]; INDEX33555481(D)6             #SSEK2: [1, 19, 90]; scan_type(ASC), INDEX33555481(DEPT as D), scan_range(null2,exp_cast(20)), is_global(0)7           #SLCT2: [1, 500, 60]; EMP.DEPT_ID < var18             #CSCN2: [1, 10000, 60]; INDEX33555484(EMP); btr_scan(1)
--條件推入SQL> explain select * from v_emp_group_by_dept where dept_id<5;1   #NSET2: [2, 5, 60]2     #PRJT2: [2, 5, 60]; exp_num(4), is_atom(FALSE)3       #PRJT2: [2, 5, 60]; exp_num(4), is_atom(FALSE)4         #HAGR2: [2, 5, 60]; grp_num(1), sfun_num(3), distinct_flag[0,0,0]; slave_empty(0) keys(EMP.DEPT_ID)5           #SLCT2: [1, 500, 60]; EMP.DEPT_ID < var16             #CSCN2: [1, 10000, 60]; INDEX33555484(EMP); btr_scan(1)
--視圖重寫SQL> create view v_emp_dept10 as select * from emp where dept_id=10;
SQL> explain select * from v_emp_dept10 where salary<1200;1   #NSET2: [1, 44, 163]2     #PRJT2: [1, 44, 163]; exp_num(6), is_atom(FALSE)3       #SLCT2: [1, 44, 163]; (EMP.DEPT_ID = var1 AND EMP.SALARY < var2) SLCT_PUSHDOWN(TRUE)4         #CSCN2: [1, 10000, 163]; INDEX33555484(EMP) NEED_SLCT(TRUE); btr_scan(1)

KingBase

--視圖合并TEST=# create view v_emp_group_by_deptTEST-# as select dept_id,avg(salary) avg_sal,min(salary) min_sal,max(salary) max_salTEST-# from empTEST-# group by dept_id;CREATE VIEW
TEST=# explain select d.dept_name,v.avg_salTEST-# from dept d,v_emp_group_by_dept vTEST-# where d.dept_id=v.dept_id and v.dept_id<20;                                            QUERY PLAN--------------------------------------------------------------------------------------------------- Hash Join  (cost=16769.67..16796.80 rows=100 width=21)   Hash Cond: (emp.dept_id = d.dept_id)   ->  Finalize GroupAggregate  (cost=16766.42..16792.26 rows=101 width=29)         Group Key: emp.dept_id         ->  Gather Merge  (cost=16766.42..16789.99 rows=202 width=37)               Workers Planned: 2               ->  Sort  (cost=15766.40..15766.65 rows=101 width=37)                     Sort Key: emp.dept_id                     ->  Partial HashAggregate  (cost=15762.02..15763.03 rows=101 width=37)                           Group Key: emp.dept_id                           ->  Parallel Seq Scan on emp  (cost=0.00..15384.33 rows=75538 width=13)                                 Filter: (dept_id < '20'::numeric)   ->  Hash  (cost=2.00..2.00 rows=100 width=18)         ->  Seq Scan on dept d  (cost=0.00..2.00 rows=100 width=18)
--條件推入TEST=# explain select * from v_emp_group_by_dept where dept_id<5;                                         QUERY PLAN--------------------------------------------------------------------------------------------- Finalize GroupAggregate  (cost=16516.15..16543.00 rows=101 width=29)   Group Key: emp.dept_id   ->  Gather Merge  (cost=16516.15..16539.72 rows=202 width=53)         Workers Planned: 2         ->  Sort  (cost=15516.13..15516.38 rows=101 width=53)               Sort Key: emp.dept_id               ->  Partial HashAggregate  (cost=15511.75..15512.76 rows=101 width=53)                     Group Key: emp.dept_id                     ->  Parallel Seq Scan on emp  (cost=0.00..15384.33 rows=12742 width=13)                           Filter: (dept_id < '5'::numeric)--視圖重寫TEST=# create view v_emp_dept10 as select * from emp where dept_id=10;CREATE VIEWTEST=# explain select * from v_emp_dept10 where salary<1200;                                        QUERY PLAN------------------------------------------------------------------------------------------- Gather  (cost=5351.92..16859.72 rows=1826 width=42)   Workers Planned: 2   ->  Parallel Bitmap Heap Scan on emp  (cost=4351.92..15677.12 rows=761 width=42)         Recheck Cond: (salary < '1200'::double precision)         Filter: (dept_id = '10'::numeric)         ->  Bitmap Index Scan on idx_emp_salary  (cost=0.00..4351.47 rows=183872 width=0)               Index Cond: (salary < '1200'::double precision)

YashanDB

--視圖合并SQL> create view v_emp_group_by_deptas select dept_id,avg(salary) avg_sal,min(salary) min_sal,max(salary) max_salfrom empgroup by dept_id;
SQL> explain select d.dept_name,v.avg_salfrom dept d,v_emp_group_by_dept vwhere d.dept_id=v.dept_id and v.dept_id<20;+----+--------------------------------+----------------------+------------+----------+-------------+--------------------------------+| Id | Operation type                 | Name                 | Owner      | Rows     | Cost(%CPU)  | Partition info                 |+----+--------------------------------+----------------------+------------+----------+-------------+--------------------------------+|  0 | SELECT STATEMENT               |                      |            |          |             |                                ||  1 |  NESTED INDEX LOOPS INNER      |                      |            |        19|       48( 0)|                                ||  2 |   VIEW                         |                      |            |        19|       48( 0)|                                ||  3 |    HASH GROUP                  |                      |            |        19|       48( 0)|                                ||* 4 |     TABLE ACCESS FULL          | EMP                  | TESTUSER   |      1917|       46( 0)|                                ||* 5 |   TABLE ACCESS BY INDEX ROWID  | DEPT                 | TESTUSER   |         1|        1( 0)|                                ||* 6 |    INDEX UNIQUE SCAN           | DEPT_PK              | TESTUSER   |         1|        1( 0)|                                |+----+--------------------------------+----------------------+------------+----------+-------------+--------------------------------+Operation Information (identified by operation id):---------------------------------------------------   3 - Group Expression: ("EMP"."DEPT_ID")   4 - Predicate : filter("EMP"."DEPT_ID" < 20)   5 - Predicate : filter("D"."DEPT_ID" < 20)   6 - Predicate : access("D"."DEPT_ID" = "V"."DEPT_ID")   --條件推入SQL> explain select * from v_emp_group_by_dept where dept_id<5;+----+--------------------------------+----------------------+------------+----------+-------------+--------------------------------+| Id | Operation type                 | Name                 | Owner      | Rows     | Cost(%CPU)  | Partition info                 |+----+--------------------------------+----------------------+------------+----------+-------------+--------------------------------+|  0 | SELECT STATEMENT               |                      |            |          |             |                                ||  1 |  SORT GROUP                    |                      |            |         4|       47( 0)|                                ||* 2 |   TABLE ACCESS FULL            | EMP                  | TESTUSER   |       425|       46( 0)|                                |+----+--------------------------------+----------------------+------------+----------+-------------+--------------------------------+Operation Information (identified by operation id):---------------------------------------------------   1 - Group Expression: ("EMP"."DEPT_ID")   2 - Predicate : filter("EMP"."DEPT_ID" < 5)           
--視圖重寫SQL> explain select * from v_emp_dept10 where salary<1200;+----+--------------------------------+----------------------+------------+----------+-------------+--------------------------------+| Id | Operation type                 | Name                 | Owner      | Rows     | Cost(%CPU)  | Partition info                 |+----+--------------------------------+----------------------+------------+----------+-------------+--------------------------------+|  0 | SELECT STATEMENT               |                      |            |          |             |                                ||* 1 |  TABLE ACCESS BY INDEX ROWID   | EMP                  | TESTUSER   |        43|       15( 0)|                                ||* 2 |   INDEX RANGE SCAN             | IDX_EMP_SALARY       | TESTUSER   |      1880|        5( 0)|                                |+----+--------------------------------+----------------------+------------+----------+-------------+--------------------------------+Operation Information (identified by operation id):---------------------------------------------------   1 - Predicate : filter("EMP"."DEPT_ID" = 10)   2 - Predicate : access("EMP"."SALARY" < 1200)

Vastbase

--視圖合并vastbase=> create view v_emp_group_by_deptas select dept_id,avg(salary) avg_sal,min(salary) min_sal,max(salary) max_salfrom empgroup by dept_id;vastbase-> vastbase-> vastbase->CREATE VIEWvastbase=> explain select d.dept_name,v.avg_salfrovastbase-> m dept d,v_emp_group_by_dept vwvastbase-> here d.dept_id=v.dept_id and v.dept_id<20;                                   QUERY PLAN--------------------------------------------------------------------------------- Hash Join  (cost=261.83..264.32 rows=19 width=20)   Hash Cond: (d.dept_id = v.dept_id)   ->  Seq Scan on dept d  (cost=0.00..2.25 rows=19 width=20)         Filter: (dept_id < 20::number)   ->  Hash  (cost=261.59..261.59 rows=19 width=16)         ->  Subquery Scan on v  (cost=261.16..261.59 rows=19 width=16)               ->  HashAggregate  (cost=261.16..261.40 rows=19 width=64)                     Group By Key: emp.dept_id                     ->  Seq Scan on emp  (cost=0.00..243.00 rows=1816 width=16)                           Filter: (dept_id < 20::number)                           --條件推入vastbase=> explain select * from v_emp_group_by_dept where dept_id<5;                          QUERY PLAN

責任編輯:武曉燕 來源: 韓鋒頻道
相關(guān)推薦

2024-12-19 07:30:34

2024-12-10 07:30:46

2024-12-05 07:31:16

2024-12-26 07:33:02

2025-04-23 07:31:14

2025-02-18 07:30:35

2025-03-27 07:30:28

2025-04-08 07:30:40

數(shù)據(jù)庫對象索引

2025-03-11 07:31:04

2024-08-22 08:02:04

OracleSQL語句

2025-03-28 07:33:09

數(shù)據(jù)庫AI助手設(shè)計

2025-07-10 07:33:05

2025-10-11 07:35:14

2025-09-30 07:32:06

2014-12-16 10:23:59

2010-07-14 10:11:30

SQL Server系

2025-05-13 07:31:33

2024-12-04 08:44:25

OS集中式數(shù)據(jù)庫

2010-09-13 11:09:34

SQL SERVER分

2011-04-02 17:21:29

sql server視圖
點贊
收藏

51CTO技術(shù)棧公眾號

国产成人高清精品| 鲁大师私人影院在线观看| 国产精品一区二区婷婷| 免费成人av在线播放| 精品国产一区二区三区四区在线观看 | 久久国产精品无码一级毛片| 国产v综合v| 成人国产精品一区二区免费麻豆 | 日本精品久久久| 亚洲天堂av中文字幕| 伊人久久大香线蕉av超碰| 欧美日韩国产中字| 水蜜桃在线免费观看| 三级av在线播放| 国产麻豆精品视频| 国产不卡av在线免费观看| 欧美在线视频第一页| 一本久久青青| 精品国产乱码久久久久久浪潮| 欧美 日韩精品| 色av手机在线| 国产精品你懂的在线| 国产中文一区二区| 国产精品久久影视| 日韩电影在线一区二区三区| 久久久伊人欧美| 天天爽天天爽天天爽| 亚洲精品动态| 亚洲国产欧美一区| 男插女视频网站| 亚洲美女性生活| 亚洲欧美se| 亚洲一区二区三区在线看| 亚洲图片小说在线| 国内在线精品| 91免费看`日韩一区二区| 91精品黄色| 国产精品无码AV| 麻豆国产欧美日韩综合精品二区| 涩涩屋成人免费视频软件| 毛茸茸free性熟hd| 国产精品国内视频| 亚洲va国产天堂va久久en| 蜜桃a∨噜噜一区二区三区| 国产高清在线观看视频| 欧美第一页浮力影院| 中文字幕乱妇无码av在线| 蜜桃视频www网站在线观看| 一区二区三区久久久| 亚洲精品国产系列| 国内三级在线观看| 26uuu久久天堂性欧美| 成人黄动漫网站免费| 国产xxxxxx| 国产精品一区二区无线| 亚洲最大的免费| 国产日本精品视频| 国产老女人精品毛片久久| 亚洲va欧美va国产综合剧情| 国产喷水吹潮视频www| 国产伦精品一区二区三区在线观看| 国产精品日日做人人爱| 91麻豆国产在线| 国产一区二区电影| 久久亚洲精品一区| 国产成人av一区二区| 在线能看的av网址| 中文字幕一区在线播放| 91猫先生在线| 国产a级全部精品| 欧美在线不卡视频| 午夜视频一区| 亚洲美女少妇撒尿| 二级片在线观看| caopo在线| 亚洲国产色一区| 俄罗斯av网站| 蜜桃视频成人m3u8| 欧美日韩国产成人在线免费| 色www免费视频| 日本精品国产| 国产丝袜一区视频在线观看| 日本一区二区视频在线播放| 久久影视一区| 欧美激情第三页| 麻豆精品久久久久久久99蜜桃| 日韩一区精品字幕| 91最新国产视频| 视频三区在线观看| 国产精品久久久久久一区二区三区 | 久久久久久97三级| 亚洲一区二区不卡视频| 污片视频在线免费观看| 日韩欧美在线免费观看| 天天插天天操天天射| 午夜视频一区二区在线观看| 精品夜色国产国偷在线| 国产麻豆a毛片| 99视频精品| 成人欧美一区二区三区在线| 三级网站在线看| 国产精品精品国产色婷婷| 欧美黄色免费网址| 秋霞国产精品| 亚洲电影av在线| xxxxx99| 99视频在线精品国自产拍免费观看| 国产精品美腿一区在线看| 精品二区在线观看| 欧美激情一区在线观看| 又大又硬又爽免费视频| 精品久久99| 精品一区二区电影| 久久国产露脸精品国产| 日韩不卡在线观看日韩不卡视频| 国产精选在线观看91| 在线观看av的网站| 欧美三级免费观看| 日本50路肥熟bbw| 亚洲综合色站| 国产欧美日韩免费| 免费毛片在线| 欧美日韩国产一中文字不卡 | 视频免费一区二区| 中文字幕亚洲国产| www.国产com| 99久久婷婷国产综合精品| 精品成人av一区| 久久天天综合| 亚洲一区二区电影| 欧美综合视频在线观看| 日韩av无码一区二区三区不卡| 日韩中文首页| 国产成人精品在线视频| 免费国产精品视频| 一区二区三区在线视频免费| 日本久久久久久久久久久久| 免费看成人哺乳视频网站| 97精品国产aⅴ7777| 亚洲免费成人在线| 亚洲一区在线观看免费| gogo亚洲国模私拍人体| 91精品综合久久久久久久久久久| 国产精品久久久久久久天堂| 精品视频三区| 一本色道久久综合亚洲aⅴ蜜桃| 自拍视频一区二区| 国产农村妇女精品一区二区| 国产欧美亚洲日本| 成人性生交大片免费看网站| 欧美videos中文字幕| 美女福利视频在线观看| 国产精品2024| 精品久久久久久无码中文野结衣| 一区二区三区视频播放| 欧美激情第6页| 熟妇高潮一区二区高潮| 精品日韩美女的视频高清| 你懂的在线观看网站| 亚洲最黄网站| 欧美日韩精品综合| 巨胸喷奶水www久久久| 一区二区欧美激情| 亚洲字幕av一区二区三区四区| 中文字幕国产一区二区| 不卡的在线视频| 欧美a级在线| 国内精品一区二区| 欧美日韩免费看片| 上原亚衣av一区二区三区| 国产又爽又黄免费软件| 亚洲免费在线电影| 中文字幕 日本| 日韩在线a电影| 中文字幕在线乱| 老牛精品亚洲成av人片| 国产91久久婷婷一区二区| 在线播放日本| 亚洲成人精品久久久| 人妻丰满熟妇av无码区| 欧美国产丝袜视频| 麻豆精品国产传媒| 国产乱码精品| 天天做天天爱天天高潮| 久草在线综合| 国产日韩中文在线| 91桃色在线观看| 国产视频精品va久久久久久| 伊人成人在线观看| 亚洲一区二区三区视频在线| 自拍偷拍亚洲天堂| 国产一本一道久久香蕉| 国产成人精品视频免费看| 色777狠狠狠综合伊人| 国产精品一码二码三码在线| 欧美三级精品| 久久久之久亚州精品露出| 触手亚洲一区二区三区| 欧美va亚洲va在线观看蝴蝶网| 秋霞av一区二区三区| 亚洲精品成人a在线观看| 日韩精品卡通动漫网站| 国产一本一道久久香蕉| 国产日韩成人内射视频 | 国产精品91xxx| 免费在线观看毛片网站| 欧美1区视频| 午夜精品电影在线观看| 免费福利视频一区| 91亚洲精品一区二区| 日韩精品专区| 国内精品久久久久久久| 成人在线免费看黄| 伊人久久综合97精品| 天天操天天操天天操| 在线成人av影院| 成人免费一级片| 欧美日韩免费看| 久久精品性爱视频| 亚洲精品成人在线| 激情无码人妻又粗又大| 久久男人中文字幕资源站| 成年女人免费视频| 国产麻豆91精品| 国产高清av片| 麻豆91精品91久久久的内涵| 日本熟妇人妻xxxxx| 99热在线精品观看| 欧美久久在线观看| 国内一区二区三区| 只有这里有精品| 99热国内精品永久免费观看| 污视频在线免费观看一区二区三区| 日韩一区二区三区观看| 国产精品久久久久久亚洲调教| 91精彩刺激对白露脸偷拍| 久久婷婷亚洲| 日韩精品一区二区三区久久| 极品少妇一区二区三区| 激情图片qvod| 欧美在线国产| 日韩资源在线观看| 91亚洲国产成人久久精品麻豆 | 日本一道在线观看| 国产精品成人一区二区不卡| 手机在线观看国产精品| 超碰免费在线| 欧美在线观看视频一区二区| 在线观看日本网站| 一本大道av伊人久久综合| 日本一区二区免费电影| 欧美性猛交xxxx久久久| 天码人妻一区二区三区在线看| 黑人巨大精品欧美一区二区一视频 | 免费黄色a级片| 成人一区二区三区在线观看 | 午夜精品影视国产一区在线麻豆| 精品久久精品久久| 伊人久久大香线蕉综合网站| 日韩av不卡播放| 欧美国产小视频| 国产女主播av| 亚洲深夜福利| 久久久久国产一区| 国产在线视视频有精品| 一级全黄裸体片| 91女厕偷拍女厕偷拍高清| 亚洲精品国产91| 亚洲同性同志一二三专区| 欧美日韩亚洲国产另类| 精品人伦一区二区三区蜜桃免费| 亚洲乱码国产乱码精品| 欧美精品123区| 丰满岳乱妇国产精品一区| 日韩国产欧美精品在线| 性开放的欧美大片| 欧美国产精品人人做人人爱| 天堂中文在线播放| 国产欧美日韩中文字幕在线| jazzjazz国产精品麻豆| 日韩欧美手机在线| 欧美久久成人| 久久综合久久色| 国产成人综合精品三级| 精品无码一区二区三区| 亚洲视频一二区| 国产超碰人人爽人人做人人爱| 欧美日韩亚洲国产综合| 99久久夜色精品国产亚洲| 亚洲国产中文在线| 在线播放日韩欧美| 高潮毛片在线观看| 97婷婷涩涩精品一区| 欧美黄色a视频| 国产伦精品一区二区三区高清版 | 日本少妇bbwbbw精品| 在线观看亚洲精品视频| 亚洲精品国产精品乱码不卡| 亚洲日本欧美中文幕| 在线āv视频| 国产精品盗摄久久久| 成人在线超碰| 亚洲乱码一区二区三区三上悠亚| 最新日韩欧美| 久久久久xxxx| 欧美极品另类videosde| 国产无码精品视频| 欧美精品少妇一区二区三区| 日韩一区二区三区中文字幕| 九九精品在线观看| 激情小说亚洲| 日本一区二区三区精品视频| 亚洲久色影视| 免费黄色av网址| 日韩码欧中文字| 99精品在线播放| 精品久久久久久久久久久久久久久| 97在线观看免费观看高清 | 欧美日韩乱国产| 欧美xxxx老人做受| 成人在线免费看黄| 成人国产在线视频| 日韩中文在线电影| 国产视频一区二区视频| 91在线高清观看| 中文在线观看免费网站| 日韩免费看网站| 91一区二区三区在线| 成人欧美一区二区三区在线| 日韩成人精品一区| 在线视频日韩一区 | 日本成人三级电影网站| 亚洲美女少妇无套啪啪呻吟| 91超薄肉色丝袜交足高跟凉鞋| 亚洲乱码中文字幕| 国产剧情久久久| 久久艳片www.17c.com| 农村妇女一区二区| 亚洲天堂电影网| 久久精品国产精品亚洲红杏| 亚洲a∨无码无在线观看| 欧美艳星brazzers| 在线免费av网站| 国产综合福利在线| 国产大片一区| 无码人妻一区二区三区在线视频| 亚洲精品伦理在线| 亚洲AV无码成人片在线观看 | 欧美成人三级视频| 日韩三级视频在线看| 欧洲精品二区| 国产综合动作在线观看| 国产精品老牛| 妺妺窝人体色WWW精品| 欧美午夜电影一区| 欧美猛烈性xbxbxbxb| 91欧美精品成人综合在线观看| 一区二区中文| 国产xxxx视频| 色一区在线观看| 在线免费黄色| 99精品国产高清一区二区| 亚洲区第一页| 国产美女永久免费无遮挡 | 天天爽夜夜爽夜夜爽| 欧美一区二区.| 日韩高清欧美| av在线网站免费观看| 亚洲电影在线播放| 视频一区二区三区国产| 国产精品日韩在线一区| 欧美.www| 亚洲熟妇无码av| 欧美日韩美女一区二区| 性xxxfreexxxx性欧美| 久久精品美女| 麻豆精品视频在线观看免费| 久久久精品99| 亚洲天堂av高清| 国产一区二区av在线| 成人一级片网站| 1000精品久久久久久久久| 高h放荡受浪受bl| 国产精品露脸自拍| 国户精品久久久久久久久久久不卡| 成人手机在线免费视频| 欧美日本一区二区三区| gratisvideos另类灌满| 西游记1978| 成人免费av在线| 亚洲天堂视频网| 国内精品在线一区| 手机亚洲手机国产手机日韩| 亚洲中文字幕无码一区| 欧美色老头old∨ideo| 大桥未久在线播放| 一区二区三区在线观看www| 99视频一区二区三区| 国产色综合视频| 国产精品96久久久久久又黄又硬|