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

如何創建高效的索引,你知道嗎?

數據庫 其他數據庫
本文基于最常用的B+樹索引來舉例,其他索引的使用有一定的限制條件。

本文介紹索引創建時需遵循一些準則,以達到最佳的查詢性能和數據維護效率,這些準則也是PawSQL索引推薦引擎的內部工作邏輯。本文基于最常用的B+樹索引來舉例,其他索引的使用有一定的限制條件,具體請參考??《數據庫索引的類型》??。

準則1:基于您的工作負載創建索引

創建高效的索引最重要的原則是,基于您的工作負載(workload)創建索引,而不是基于您的表結構。針對數據庫執行的所有 SQL 語句構成了該數據庫的工作負載。索引的目的是為了提升數據庫中操作的效率,因此任何其他不以工作負載出發的索引創建方法都是錯誤的。

在針對一個工作負載構建一組索引時,需要考慮工作負載的以下屬性:

  • SQL類型,在用戶執行頻繁插入新數據和修改現有數據的OLTP場景,多個索引可能會對性能產生負面影響,并對系統資源造成壓力,建議創建最少數量的索引來滿足您的索引要求。而在以查詢為主的OLAP場景,您可以添加更多索引,每個索引具有多個鍵列,甚至可以添加函數索引和條件索引。
  • SQL頻率,為最頻繁使用的查詢創建索引,通過為這些查詢創建最好的索引,能夠最大限度的提升系統的整體性能。
  • SQL的重要性,查詢越重要,您可能越想通過創建索引來進行性能優化。
  • SQL的本身的結構,詳見下一章節。

準則2:基于單個SQL的結構創建索引

索引的作用如下:

  • 快速定位數據
  • 避免排序
  • 避免回表
  • 實現行級鎖(MySQL,另文討論)
  • 實現唯一性約束

本章節我們將通過分析SQL的結構來實現以上的功能,創建高效的索引。

為快速定位創建索引

索引可以通過匹配查詢的條件快速的定位數據,查詢的條件可能在WHERE子句、HAVING子句、ON子句中。索引和條件的匹配原則遵循最左前綴匹配原則.

最左前綴原則

最左前綴原則指的是,如果查詢的時候等值的查詢條件精確匹配索引的左邊連續一列或幾列,則此列就可以被用到,同時遇到范圍查詢(>、<、between、like)就會停止匹配,包括范圍條件。

對于聯合索引lineitem(l_shipdate,l_quantity),下面的SQL中前兩個符合最左前綴原則,可以使用該索引。最后一個不滿足最左前綴原則,無法使用該索引。

select * from lineitem where l_shipdate = date '2021-12-01' and l_quantity = 100; -- 可以使用索引
select * from lineitem where l_shipdate = date '2021-12-01'; -- 可以使用索引
select * from lineitem where l_quantity = 100; -- 不滿足最左前綴原則,無法使用該索引

這三個SQL對于的執行計劃如下:

-> Index lookup on lineitem using lidx (L_QUANTITY=100.00, L_SHIPDATE=DATE'2021-12-01')  (cost=0.35 rows=1)
-> Index lookup on lineitem using lidx ( L_SHIPDATE=DATE'2021-12-01')  (cost=0.35 rows=1)
-> Filter: (lineitem.L_QUANTITY = 100.00)  (cost=15208.05 rows=49486)
-> Table scan on lineitem (cost=15208.05 rows=148473)

由于最左前綴原則,在創建聯合索引時,索引字段的順序需要考慮字段值去重之后的個數(Cardinality),Cardinality較大的放前面。

等值條件(Index lookup)

  • 單表等值條件
  • COL = 'A'
  • COL IN ('A')
  • 關聯等值條件, 在一個表作為被驅動表時的等值關聯條件也可以被認為時等值條件被索引匹配使用。
  • T1.COL = T2.COL
  • select * from orders, lineitem where o_orderkey = l_orderkey;
    -> Nested loop inner join  (cost=484815.77 rows=1326500)
    -> Table scan on orders (cost=20540.71 rows=200128)
    -> Index lookup on lineitem using lineitem_idx(L_ORDERKEY=orders.O_ORDERKEY) (cost=1.66 rows=7)

范圍條件(Index range scan)

  • 范圍操作符(>,>=,<,<=,BETWEEN)
  • IN ('A','B')
  • IS NOT NULL
  • IS NULL
  • LIKE 'ABC%'
  • COL = 'A' OR COL = 'B'

范圍條件也可以用來快速定位數據。

create index lshipdate_idx on lineitem(l_shipdate);
explain format = tree select * from lineitem where l_shipdate >= date '2021-12-01';
-> Index range scan on lineitem using lshipdate_idx over ('2021-12-01' <= L_SHIPDATE), with index condition: (lineitem.L_SHIPDATE >= DATE'2021-12-01')  (cost=11855.06 rows=26344)

由于最左匹配原則,位于范圍條件后面的索引列無法利用該索引。

為避免排序創建索引

對于B+樹索引,由于其是按照索引鍵排序的,因此可以通過索引來避免在SQL執行中進行排序。涉及的SQL結構主要包括:

  • GROUP BY
  • ORDER BY
  • DISTINCT
  • PARTITION BY... ORDER BY...
create index lshipdate_idx on lineitem(l_shipdate);

可以看到下面的SQL的執行計劃通過訪問lshipdate_idx索引避免了排序。

  • SQL1 (ORDER BY)
select * from lineitem order by l_shipdate limit 10;
  • SQL1執行計劃
-> Limit: 10 row(s)  (cost=0.02 rows=10)
-> Index scan on lineitem using lshipdate_idx (cost=0.02 rows=10)
  • SQL2(GROUP BY)
select l_shipdate, sum(l_quantity) as sum_qty from lineitem group by l_shipdate;
  • SQL2執行計劃
-> Group aggregate: sum(lineitem.L_QUANTITY)  (cost=30055.35 rows=148473)
-> Index scan on lineitem using lshipdate_idx (cost=15208.05 rows=148473)
  • SQL3(DISTINCT)
select DISTINCT l_shipdate from lineitem;
  • SQL3執行計劃
-> Covering index skip scan for deduplication on lineitem using lshipdate_idx  (cost=4954.90 rows=15973)
  • SQL4(PARTITION BY... ORDER BY...)
select rank() over (partition by L_SHIPDATE order by L_ORDERKEY)  from lineitem;
  • SQL4執行計劃
WindowAgg  (cost=0.29..545.28 rows=10000 width=28)
-> Index Only Scan using lshipdate_idx on lineitem (cost=0.29..370.28 rows=10000 width=20)

需要注意

  1. 對于分組和去重,順序不一致是沒有關系的。
  2. 對于排序,排序字段的順序需要和索引字段的順序一致,否則沒有辦法利用索引來避免排序。
  3. 對于同時有分組和排序的,需要把排序的索引列放在前面。

譬如對于下面的SQL。

select l_shipdate, l_orderkey,  sum(l_quantity) as sum_qty from lineitem group by l_shipdate,l_orderkey order by l_orderkey;
  • 情形1,建索引(l_shipdate, l_orderkey),索引訪問,需排序,代價為486.526。
-> Sort: lineitem.L_ORDERKEY  (actual time=479.465..486.526 rows=149413 loops=1)
-> Stream results (cost=30055.35 rows=148473) (actual time=0.175..423.447 rows=149413 loops=1)
-> Group aggregate: sum(lineitem.L_QUANTITY) (cost=30055.35 rows=148473) (actual time=0.170..394.978 rows=149413 loops=1)
-> Index scan on lineitem using lshipdate_idx2 (cost=15208.05 rows=148473) (actual time=0.145..359.567 rows=149814 loops=1)
  • 情形2,建索引(l_orderkey,l_shipdate),索引訪問,避免排序,代價228.401,性能提升120%。
-> Group aggregate: sum(lineitem.L_QUANTITY)  (cost=30055.35 rows=148473) (actual time=0.067..228.401 rows=149413 loops=1)
-> Index scan on lineitem using lshipdate_idx3 (cost=15208.05 rows=148473) (actual time=0.052..194.479 rows=149814 loops=1)

為避免回表創建索引(Covering index scan)

當查詢中的列都在索引列中時,數據庫只需要訪問索引即可獲取所需的數據,避免了回表操作。在某些場景下,可以大幅的提升查詢效率。

對于如下的SQL語句。

select l_shipdate, l_orderkey,  sum(l_quantity) as sum_qty from lineitem group by l_orderkey,l_shipdate;
  • 索引(l_orderkey,l_shipdate)中沒有包含??l_quantity??,需要回表,執行計劃如下,代價194.875。
-> Group aggregate: sum(lineitem.L_QUANTITY)  (cost=30055.35 rows=148473) (actual time=0.044..194.875 rows=149413 loops=1)
-> Index scan on lineitem using lshipdate_idx3 (cost=15208.05 rows=148473) (actual time=0.034..159.863 rows=149814 loops=1)
  • 索引(l_orderkey,l_shipdate,l_quantity )中包含l_quantity,不需要回表,執行計劃如下,代價113.433,性能提升約71.8%。
-> Group aggregate: sum(lineitem.L_QUANTITY)  (cost=30055.35 rows=148473) (actual time=0.035..113.433 rows=149413 loops=1)
-> Covering index scan on lineitem using lshipdate_idx4 (cost=15208.05 rows=148473) (actual time=0.026..82.266 rows=149814 loops=1)

其他相關主題

分區表的索引

對于分區表,不同的數據庫對分區表索引的支持不一樣,總體來說,分區表可以建立以下三種類型的索引。

  • 本地分區索引(PostgreSQL/MySQL/Oracle/Opengauss)。
  • 全局分區索引(Oracle)。
  • 全局非分區索引(Oracle/Opengauss)。
本地分區索引

在索引維護性方面,本地索引比全局索引容易管理,當你在進行添加、刪除、truncate表分區時,本地索引會自動維護其索引分區。MySQL和PostgreSQL只支持本地分區索引; Oracle和Opengauss創建本地分區索引時需指定關鍵字local。

create index lshipdate_idx on lineitem(l_shipdate) local;
全局分區索引

和表分區類似,索引的分區鍵和表的分區鍵沒有必然的關系,甚至非分區表也可以建立全局分區索引。Oracle支持全局分區索引。

全局非分區索引

對于全局非分區索引,當你對表分區進行操作時,索引可能變得不可用,需顯式的更新或重建索引。在索引效率方面,全局索引在不包含分區字段的查詢中,效率比本地分區索引更高效。Oracle和Opengauss為分區表默認創建的是全局非分區索引。

create index lshipdate_idx on lineitem(l_shipdate) global;
create index lshipdate_idx on lineitem(l_shipdate);

在進行分區操作時,需要增加update global index關鍵字重建索引,否則索引不可用。

alter table t DROP PARTITION partition_name update global index;

函數索引

函數索引(或表達式索引)即基于函數或表達式的索引,它使用函數或是表達式提供計算好的值作為索引列構建索引,可以在不修改應用程序的情況下提高查詢性能。

函數索引的使用需要函數或是表達式和SQL查詢中的表達式嚴格匹配,所以它使用的條件較為嚴格,適合針對重要查詢或是頻次較高的查詢重點優化。

select * from lineitem where EXTRACT(DAY from l_shipdate) = 1;
  • 建在l_shipdate在執行計劃中沒有被使用。
Seq Scan on lineitem  (cost=0.00..1870.24 rows=238 width=158) (actual time=0.502..10.655 rows=1616 loops=1)
Filter: (EXTRACT(day FROM l_commitdate) = '1'::numeric)
Rows Removed by Filter: 46000
Planning Time: 0.107 ms
Execution Time: 10.709 ms
  • 通過創建函數索引,執行計劃中的代價降低為原來的1/10。
create index idx on lineitem(EXTRACT(DAY from l_shipdate));
Bitmap Heap Scan on lineitem  (cost=6.13..593.60 rows=238 width=158) (actual time=0.216..0.981 rows=1620 loops=1)
Recheck Cond: (EXTRACT(day FROM l_shipdate) = '1'::numeric)
Heap Blocks: exact=889
-> Bitmap Index Scan on idx (cost=0.00..6.08 rows=238 width=0) (actual time=0.149..0.149 rows=1620 loops=1)
Index Cond: (EXTRACT(day FROM l_shipdate) = '1'::numeric)
Planning Time: 0.102 ms
Execution Time: 1.075 ms

條件索引

條件索引又叫部分索引(Partial index),它是建立在一個表的子集上的索引,而該子集是由一個條件表達式定義的,該索引只包含表中那些滿足這個條件表達式的行。

條件索引被使用的條件比較嚴格,只有在數據庫能夠識別出該查詢的WHERE條件在邏輯上涵蓋了該索引的條件表達式定義時,這個部分索引才能被用于該查詢。

以下的條件索引為例,其索引的條件表達式為l_shipdate > '2022-01-01'。

create index l_partkey_idx on lineitem(l_partkey) where l_shipdate > '2022-01-01';

由于下面的查詢語句的條件l_shipdate = date '2021-12-01'沒有落到此索引條件表達式的范圍內,該索引將不會被用到,所以執行計劃采用的是全表掃描。

select l_partkey , count(1) from lineitem where l_shipdate = date '2021-12-01' and l_partkey < 100 group by l_partkey ;
GroupAggregate (cost=1870.25..1870.27 rows=1 width=12)
Group Key: l_partkey
-> Sort (cost=1870.25..1870.26 rows=1 width=4)
Sort Key: l_partkey
-> Seq Scan on lineitem (cost=0.00..1870.24 rows=1 width=4)
Filter: ((l_partkey < 100) AND (l_shipdate = '2021-12-01'::date))

而下面的查詢語句的條件l_shipdate = date '2022-12-01'在條件表達式的范圍內,數據庫優化器將會采用此索引,可以看到性能有大幅提升。

select l_partkey , count(1) from lineitem where l_shipdate = date '2022-12-01' and l_partkey < 100 group by l_partkey ;
GroupAggregate  (cost=402.37..402.39 rows=1 width=12)
Group Key: l_partkey
-> Sort (cost=402.37..402.38 rows=1 width=4)
Sort Key: l_partkey
-> Index Scan using lorderkey_idx on lineitem (cost=0.28..402.36 rows=1 width=4)
Filter: ((l_partkey < 100) AND (l_shipdate = '2022-12-01'::date))

特別提示:MySQL目前還不支持條件索引,而PostgreSQL、Opengauss、Oracle都支持。

索引融合

索引融合(Index Merge)是使用多個索引來完成一次單表數據訪問的優化技術。當查詢中涉及一個表的多個條件時,如果這些條件分別有合適的索引,索引融合可以在回表之前將多個索引的結果合并,以提高查詢性能。

在lineitem表上有在l_shipdate以及l_partkey的單列索引,對于以下的SQL。

select * from lineitem where l_shipdate = date '2010-12-01' or l_partkey=100;

PostgreSQL的執行計劃。

Bitmap Heap Scan on lineitem  (cost=9.05..202.96 rows=59 width=158)
Recheck Cond: ((l_shipdate = '2010-12-01'::date) OR (l_partkey = 100))
-> BitmapOr (cost=9.05..9.05 rows=59 width=0)
-> Bitmap Index Scan on l_shipdate_idx (cost=0.00..4.70 rows=54 width=0)
Index Cond: (l_shipdate = '2010-12-01'::date)
-> Bitmap Index Scan on l_partkey_idx (cost=0.00..4.33 rows=5 width=0)
Index Cond: (l_partkey = 100)

MySQL的執行計劃。

-> Filter: ((lineitem.L_SHIPDATE = DATE'2010-12-01') or (lineitem.L_PARTKEY = 100))  (cost=12.53 rows=21)
-> Deduplicate rows sorted by row ID (cost=12.53 rows=21)
-> Index range scan on lineitem using l_shipdate_idx over (L_SHIPDATE = '2010-12-01') (cost=1.11 rows=1)
-> Index range scan on lineitem using l_partkey_idx over (L_PARTKEY = 100) (cost=3.03 rows=20)

可以看出,MySQL及PostgreSQL都支持索引融合優化優化,索引融合的算法另文討論。

外鍵索引

應該在外鍵上鍵上創建索引,這個原則似乎和第一個原則(基于您的工作負載創建索引)相矛盾,然而事實上卻是一致的,因為在真實應用中,表之間的關聯絕大多數都是基于主外鍵來進行的。通過在外鍵上建立索引,可以提升表關聯的效率,特別是在支持索引融合的數據庫上。

在MySQL中,如果某個字段被定義為外鍵,默認會有對應的索引建立在上面;而在PostgreSQL系列的數據庫中,將某些字段設置外鍵并不會自動在這些字段上建上索引。

準則3:創建索引時的約束條件

創建索引時,雖然它們可以提高讀取性能,但是索引也不是免費的午餐,創建索引也具有一定的代價,譬如索引會對寫入性能產生負面影響,因為對于數據庫管理器寫入表的每一行,它還必須更新任何受影響的索引。基于此,我們通常會限制每個表創建的最大索引數量。而且索引還會占用一定的磁盤空間,在磁盤空間比較緊張的系統上,索引的大小和數量也需要進行控制。這部分內容我們稱之為約束條件。我們的目標就是在給定的約束條件下,創建合適的索引,以最大限度的提升系統的整體性能。

  • 單表索引數目
  • 索引字段數目
  • 索引磁盤空間

針對以上的約束條件,我們通常通過以下的方法創建和維護索引:

  • 索引列取舍:通過對列的單值選擇率的評估,在過濾效果最好的列上建立索引; 通過對工作負載的分析,避免在頻繁更新的列上建立索引。
  • 索引取舍:通過對工作負載的分析,在最重要的SQL或是使用頻率最高的查詢上提供索引。
  • 索引合并:索引滿足組最左前綴匹配原則,所以可以通過設計索引列的排列順序,達到一個索引加速多個SQL的查詢。
  • 索引刪除:通過命令或工具定期采集索引的使用情況,將不再使用的索引進行刪除。

總結

本周來講,索引創建的過程可以抽象化為基于以上的約束條件,定義索引的收益,使用啟發式算法,計算在滿足特定約束條件下,整個工作負載收益最大的索引集合,這也是PawSQL索引推薦引擎的內部邏輯。

責任編輯:姜華 來源: PawSQL
相關推薦

2024-07-08 00:00:01

多線程ThreadC#

2023-09-04 07:54:06

2024-02-05 12:08:07

線程方式管理

2024-11-14 10:44:57

2024-06-20 08:06:30

2023-01-13 17:02:10

操作系統鴻蒙

2023-03-21 07:39:51

CentOS掛載硬盤

2025-01-16 16:41:00

ObjectConditionJDK

2024-10-05 00:00:00

HTTPS性能HTTP/2

2017-10-16 13:45:04

2023-12-12 08:41:01

2024-10-24 08:47:12

2023-01-09 08:00:41

JavaScript閉包

2022-09-29 15:32:58

云計算計算模式

2021-10-14 06:52:47

算法校驗碼結構

2024-09-18 07:00:00

消息隊列中間件消息隊列

2024-10-15 10:32:30

2024-02-23 08:09:43

Rediskey名字數據庫

2024-12-03 00:38:37

數據湖存儲COS

2024-04-07 00:00:00

ESlint命令變量
點贊
收藏

51CTO技術棧公眾號

成人午夜在线免费| 欧美激情一区| 欧美视频一区在线| 潘金莲一级淫片aaaaa免费看| 伊人亚洲综合网| 欧美一区网站| 亚洲欧美精品suv| 日韩精品视频一二三| 丁香高清在线观看完整电影视频 | 国产精品日韩在线一区| 日本猛少妇色xxxxx免费网站| 日本少妇精品亚洲第一区| 疯狂做受xxxx欧美肥白少妇| 中文字幕中文字幕一区三区| 四虎国产精品永远| 韩国欧美国产一区| 青草成人免费视频| 久久久国产成人| 日韩片欧美片| 日韩毛片中文字幕| 亚洲三级在线视频| 福利一区二区免费视频| 欧美日韩免费在线| 日韩久久久久久久久久久久| 91最新在线| 久久这里只有精品首页| 99伊人久久| 91丨九色丨蝌蚪丨对白| 国产日韩一区二区三区在线播放 | 精品卡一卡二卡三卡四在线| 香蕉视频网站入口| 国产资源在线观看入口av| 亚洲特黄一级片| 亚洲二区三区四区| 猫咪在线永久网站| 99久久精品免费看国产免费软件| 亚洲a在线观看| 亚洲天堂999| 久久久久久久尹人综合网亚洲| 欧美激情一区二区久久久| 99热99这里只有精品| 欧美一二区在线观看| 亚洲摸下面视频| 国产精品久久无码| 成人香蕉社区| 精品国产一区a| 人妻精油按摩bd高清中文字幕| 日韩精品一级毛片在线播放| 在线免费av一区| 国产视频一区二区三区在线播放| 在线天堂新版最新版在线8| 五月婷婷激情综合| 成人在线播放网址| 成年女人在线看片| 福利精品视频在线| 精品99在线视频| 亚洲最新无码中文字幕久久| 色综合天天做天天爱| 凹凸国产熟女精品视频| 在线最新版中文在线| 色综合色狠狠综合色| www.国产区| 日本乱码一区二区三区不卡| 欧美午夜影院在线视频| 成人一级片网站| 欧美日韩五码| 欧美丝袜第三区| 天堂av2020| 国内不卡的一区二区三区中文字幕 | 懂色一区二区三区免费观看| 国产一区二区不卡视频| 青青免费在线视频| 欧美经典一区二区| 熟妇熟女乱妇乱女网站| 四虎影视国产在线视频| 亚洲高清在线精品| 男人揉女人奶房视频60分| 欧美极度另类| 欧美麻豆精品久久久久久| 熟妇无码乱子成人精品| 黄色欧美在线| 国产一区二区三区在线播放免费观看 | 精品人妻一区二区三区换脸明星 | 国产一区福利在线| 国产伦精品一区二区三毛| 色鬼7777久久| 国产精品国产三级国产普通话99| 国内自拍中文字幕| 欧美aa在线观看| 欧美日韩国产影片| 国内精品免费视频| 国内黄色精品| 欧美黑人极品猛少妇色xxxxx| 一区二区三区视频免费看| 日韩电影在线观看一区| 亚洲影视九九影院在线观看| 亚洲 欧美 激情 另类| 国产精品麻豆网站| 国产精品久久久久久久乖乖| 午夜精品久久久久久久久久蜜桃| 在线91免费看| 97人妻天天摸天天爽天天| 不卡视频在线| 午夜精品福利视频| 97超视频在线观看| 91色婷婷久久久久合中文| 宅男噜噜99国产精品观看免费| av人人综合网| 91精品欧美一区二区三区综合在| 色呦呦一区二区| 最新精品国产| 国产精品成人品| 欧美熟女一区二区| 亚洲嫩草精品久久| 欧美群妇大交群的观看方式| 无码人妻丰满熟妇区96| 日韩国产大片| 亚洲天堂男人天堂女人天堂| 欧美精品一区二区蜜桃| 全国精品久久少妇| 韩国一区二区三区美女美女秀| 在线激情网站| 色综合天天狠狠| 日本50路肥熟bbw| 天天综合久久| 国产精品久久久久久中文字| 污视频在线免费| 一区二区三区**美女毛片| 香港日本韩国三级网站| 久久av网址| 欧美性视频在线| 欧美 日韩 国产 在线| 亚洲免费观看高清完整版在线观看 | 国内国产精品久久| 亚洲欧洲久久| 素人一区二区三区| 一本色道久久88亚洲综合88| av黄色在线播放| 91玉足脚交白嫩脚丫在线播放| 成人av在线播放观看| 91成人app| 久久精品国产亚洲一区二区| 国产黄色免费视频| 国产欧美精品国产国产专区| 无码精品国产一区二区三区免费| 欧美绝顶高潮抽搐喷水合集| 久久久中精品2020中文| 国产91久久久| 亚洲国产一区二区视频| 少妇熟女视频一区二区三区| 韩日精品视频| 国产综合18久久久久久| 69视频在线观看免费| 欧美肥老太太性生活| 国产精品国产福利国产秒拍| 激情小视频在线| 91国偷自产一区二区三区观看| 短视频在线观看| 老司机午夜精品视频| 欧美一二三区| 久久久久久久性潮| 日日骚av一区| 国产视频一区二区三| 亚洲精品久久7777| 久久久久国产免费| 亚洲深夜影院| 欧美精品亚洲| 国产极品一区| 欧美丰满片xxx777| 神马久久久久久久久久| 欧美性色视频在线| 黄色国产在线播放| 国产高清久久久| 欧美,日韩,国产在线| 九九亚洲视频| 成人羞羞国产免费| 国产盗摄精品一区二区酒店| 日韩精品免费在线视频观看| 夜夜躁日日躁狠狠久久av| 亚洲欧洲日产国码二区| 波多野结衣办公室双飞| 美女尤物久久精品| 亚洲人一区二区| 97se亚洲| 国产精品久久久久久久久久三级| 日韩免费啪啪| 亚洲激情成人网| 国产精品无码粉嫩小泬| 樱桃视频在线观看一区| 性久久久久久久久久| 美女视频黄 久久| 屁屁影院ccyy国产第一页| 久久99高清| 国产传媒一区| 成人在线中文| 2020欧美日韩在线视频| 日本天堂在线观看| 日韩精品在线观看网站| 国产男女裸体做爰爽爽| 黄色av网站免费在线观看| 9l亚洲国产成人精品一区二三| 精品中文字幕视频| 欧美孕妇性xxxⅹ精品hd| 欧美三级中文字幕| 国产精品19乱码一区二区三区| 久久久久国产精品麻豆| 91福利视频免费观看| 三级欧美韩日大片在线看| 国产女人18毛片| 黑丝美女一区二区| 国产一区二区三区四区五区加勒比| a成人v在线| 日本精品一区二区三区在线 | 中文字幕国产日韩| 色婷婷av一区二区三区之e本道| 欧美日韩在线综合| 男人天堂2024| 午夜精品久久久久| 成年人午夜剧场| 国产欧美日韩亚州综合| 国产精品麻豆入口| 国产jizzjizz一区二区| 日韩av.com| 日韩成人伦理电影在线观看| 黄网站欧美内射| 欧美激情一区| 加勒比海盗1在线观看免费国语版| 青青草97国产精品麻豆| 欧美日韩另类丝袜其他| 国产女人18毛片水真多18精品| 91深夜福利视频| 成人精品高清在线视频| 国产精品久久久久久亚洲影视| 精品三级久久| 97精品国产97久久久久久免费| 伊人影院在线视频| 久久综合伊人77777蜜臀| 婷婷在线视频| 色悠悠久久久久| 爱爱爱免费视频在线观看| 亚洲欧美日韩久久久久久 | 最近2019免费中文字幕视频三| 欧美18xxxxx| 亚洲欧美三级在线| 你懂的在线网址| 亚洲小视频在线观看| 你懂的免费在线观看视频网站| 亚洲女人天堂成人av在线| 嫩草研究院在线| 亚洲天堂免费视频| 国产三级在线看| 亚洲最大中文字幕| av在线电影播放| xxxxx成人.com| 日本高清中文字幕在线| 久久精品久久久久久国产 免费| 天天在线视频色| 久久精品视频一| 中中文字幕av在线| 久久久久久国产免费 | 国产精品电影网| 精品美女一区| 亚洲综合最新在线| 99国产精品免费网站| 好吊色欧美一区二区三区| 亚洲另类av| 亚洲国产成人不卡| 我不卡手机影院| 国产精品69久久久| 国产欧美一级| 中文字幕国产传媒| 狠狠色丁香久久婷婷综合_中| 日本黄色www| av中文字幕亚洲| av黄色在线免费观看| 亚洲欧洲色图综合| 国产无遮挡裸体免费视频| 精品女同一区二区三区在线播放| 国产精品久久久久久99| 欧美色区777第一页| 国内精品久久久久久久久久久| 精品88久久久久88久久久| 你懂的在线看| 美女少妇精品视频| 亚洲一二三四| 成人性生交xxxxx网站| 美女呻吟一区| 夜夜爽www精品| 99亚洲一区二区| 91女神在线观看| 国产成人精品一区二| 全黄一级裸体片| 亚洲另类在线视频| 欧美精品韩国精品| 6080yy午夜一二三区久久| 午夜小视频免费| 久久香蕉国产线看观看av| 爱搞国产精品| 91久久久久久| 蜜乳av综合| 激情小视频网站| 麻豆成人在线观看| 亚洲永久无码7777kkk| 亚洲视频免费在线| 国产免费www| 精品福利一区二区三区 | 欧美美乳视频| 欧美一二三不卡| 奇米精品一区二区三区在线观看一| 一级黄色免费视频| 亚洲视频一二三区| 午夜一区二区三区四区| 亚洲成人亚洲激情| 超碰在线无需免费| 国产精品亚洲第一区| 日韩高清成人在线| 人人妻人人澡人人爽欧美一区双| 日本伊人午夜精品| 毛茸茸多毛bbb毛多视频| 亚洲一区二区三区爽爽爽爽爽 | 日韩精品中午字幕| 日本不卡视频| 国产精品免费一区二区三区都可以| 欧美大片网址| 日韩极品视频在线观看| 国模娜娜一区二区三区| 九九九视频在线观看| 色偷偷久久一区二区三区| 日本美女一级片| 欧美激情小视频| 日韩不卡在线视频| 浴室偷拍美女洗澡456在线| 美女视频黄 久久| 99自拍偷拍视频| 欧美日韩美少妇| 又爽又大又黄a级毛片在线视频| 国产成人中文字幕| 九九久久电影| wwwwww.色| 国产精品乱码一区二区三区软件 | 狠狠v欧美v日韩v亚洲ⅴ| 欧美自拍偷拍网| 欧美日韩一区不卡| av在线资源网| 国产欧美中文字幕| 国产精品黑丝在线播放| 午夜xxxxx| 伊人性伊人情综合网| 亚洲av无码乱码国产精品久久| 久久久精品日本| 久久久久毛片免费观看| 国产成人一二三区| 高清不卡在线观看av| 日本在线视频免费观看| 亚洲精美色品网站| 亚洲永久av| 亚洲国产精品www| 激情综合色播激情啊| 欧美精品久久久久久久久46p| 91精品国产欧美一区二区18| 在线黄色网页| 国产一区精品视频| 久久久久国产一区二区| 呻吟揉丰满对白91乃国产区| 欧美一区二区三区四区五区| 精精国产xxxx视频在线中文版 | 久久社区一区| 三上悠亚 电影| 狠狠色香婷婷久久亚洲精品| 国产一二在线观看| 成人在线小视频| 伊人久久大香线蕉综合热线| 无码成人精品区在线观看| 欧美午夜性色大片在线观看| av大片在线观看| 51成人做爰www免费看网站| 伊人成年综合电影网| 88久久精品无码一区二区毛片| 欧美日韩国产高清一区二区三区| 午夜在线激情影院| 蜜桃传媒视频第一区入口在线看| 青青草国产精品97视觉盛宴| 午夜少妇久久久久久久久| 日韩精品在线影院| 欧美综合社区国产| 久久久久久久9| 久久久久免费观看| 99精品久久久久久中文字幕| 欧美亚洲在线观看| 亚洲国产精品成人| 中文字幕一二三四区| 欧美猛男男办公室激情| 阿v视频在线| 一级黄色免费在线观看| 99国产精品99久久久久久| 亚洲一区在线观| 6080yy精品一区二区三区| 天天久久综合| 素人fc2av清纯18岁| 欧美一区二区在线视频|