精品欧美一区二区三区在线观看 _久久久久国色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技術棧公眾號

日本三级亚洲精品| 在线免费看v片| 一级黄色毛毛片| 羞羞视频在线观看免费| 亚洲人成精品久久久 | 欧美日韩精品免费观看视频| 久久91精品国产| 国产高潮免费视频| 欧美日韩在线中文字幕| 国产综合网站| 欧美高清激情brazzers| 日本一区二区久久精品| 一级黄色免费网站| 日韩欧美ww| 精品国产精品三级精品av网址| 97超碰人人看人人| 精品99久久久久成人网站免费| 国产一区二区三区国产精品| 国产精品传媒入口麻豆| 国产精品视频内| av男人的天堂av| 国产精品av一区二区三区| 不卡电影一区二区三区| 久久久久久久久国产| 成年女人免费视频| а√天堂8资源在线| av福利精品导航| 国语自产精品视频在免费| 国内精品免费视频| 日韩城人网站| 亚洲欧美精品午睡沙发| 亚洲在线视频福利| 欧美精品99久久久| 日韩美女一区二区三区在线观看| 欧洲一区在线电影| 在线视频福利一区| aaa一区二区三区| 国产精品v欧美精品v日本精品动漫| 亚洲天堂影视av| av污在线观看| 91精品论坛| 婷婷国产在线综合| 成人小视频在线观看免费| 免费国产羞羞网站视频| 国产美女一区| 日韩在线观看免费高清完整版| 午夜啪啪小视频| 欧美videossex另类| 成人av一区二区三区| 亚洲精品欧美日韩专区| 伊人影院中文字幕| 欧美三级特黄| 日韩精品免费视频| 在线免费av播放| 亚洲国产尤物| 亚洲在线观看免费视频| 久久久综合香蕉尹人综合网| 亚洲av无码乱码国产精品fc2| 午夜精品视频一区二区三区在线看| 欧美一级国产精品| 日韩中文字幕在线免费| 国产高清一级毛片在线不卡| 国产自产视频一区二区三区| 97在线看免费观看视频在线观看| 少妇精品无码一区二区免费视频| 韩国三级成人在线| 天天亚洲美女在线视频| 青草视频在线观看视频| av色图一区| va亚洲va日韩不卡在线观看| 国产专区一区二区三区| 一区二区三区www污污污网站| 午夜亚洲福利| 中文字幕日韩在线观看| 性色av蜜臀av浪潮av老女人| 日本成人在线网站| 欧美高清视频一二三区 | 怡红院成人在线| 久久久亚洲高清| 91九色综合久久| 国产伦精品一区二区三区视频我| 亚洲国产一成人久久精品| 久久久www成人免费精品| 久久久久麻豆v国产精华液好用吗| 日韩三级成人| 欧美变态凌虐bdsm| 亚洲欧美久久久久| 美女福利一区二区| 欧美少妇一区二区| 欧美女人性生活视频| 欧美xxxx性xxxxx高清| 欧美日韩亚洲成人| 大陆av在线播放| 日韩激情电影| 亚洲一区二区综合| 成人午夜视频免费观看| 永久免费在线观看视频| 国产亚洲精品7777| 久久久婷婷一区二区三区不卡| 岛国在线大片| 亚洲免费色视频| 欧洲黄色一级视频| 亚洲综合资源| 欧美久久久久久蜜桃| 91精品国产高清91久久久久久 | 7777精品伊久久久大香线蕉语言| 秋霞视频一区二区| 亚洲国产岛国毛片在线| 免费中文日韩| 四虎在线观看| 94色蜜桃网一区二区三区| y111111国产精品久久婷婷| 国产毛片在线视频| 国产综合色在线| 久久婷婷人人澡人人喊人人爽| 欧美三级黄网| 亚洲天堂精品视频| 美女在线免费视频| 超碰porn在线| 亚洲国产精品一区二区久久恐怖片 | www.日日操| 欧洲av一区二区| 精品少妇一区二区三区在线播放| 日本精品久久久久中文| 日本一区二区在线看| 午夜精品久久久久久久99热| 国产永久免费视频| 国产日韩三级在线| av免费观看网| 婷婷激情一区| 欧美日韩一区在线| 国产精品无码在线| 黑丝一区二区三区| 91在线看www| 香蕉视频在线播放| 色婷婷亚洲精品| 国产九九热视频| 精品国产一区二区三区av片| 色噜噜国产精品视频一区二区| 国产一区在线观看免费| 66视频精品| 国产精品亚洲片夜色在线| 国产露脸无套对白在线播放| 成人午夜视频免费看| 欧美成人免费在线| 超碰资源在线| 欧美精品一区二区在线观看| 国产又粗又猛又爽视频| 一区二区三区福利| 国产欧美日韩高清| 成人午夜在线观看视频| 亚洲欧美偷拍三级| 不卡中文字幕在线观看| 999成人网| 性亚洲最疯狂xxxx高清| 国产91免费在线观看| 久久久精品黄色| 亚洲中文字幕无码不卡电影| gogo大尺度成人免费视频| 日韩在线免费高清视频| 亚洲香蕉在线视频| 丁香桃色午夜亚洲一区二区三区| 久久香蕉视频网站| 操欧美女人视频| 正在播放欧美视频| 国产美女www| 成人avav在线| 成人在线免费观看av| 国产欧美日韩在线观看视频| 欧美激情一级精品国产| 亚洲欧美另类视频| 欧美日韩精品在线观看| 美女100%无挡| 91久久黄色| 成人一区二区电影| 国产一级片在线播放| 亚洲一级不卡视频| 欧美性生交xxxxx| 久久一区二区三区超碰国产精品| 97超级在线观看免费高清完整版电视剧| 在线三级中文| 欧美欧美欧美欧美| 亚洲欧美一区二区三区四区五区| 日本成人在线视频网站| 91社在线播放| 国产亚洲欧美日韩精品一区二区三区 | 国产99久久久欧美黑人| 朝桐光av在线一区二区三区| 欧美—级在线免费片| 国产极品粉嫩福利姬萌白酱| 九色精品国产蝌蚪| 成人午夜在线视频一区| 91福利区在线观看| 日韩欧美中文字幕一区| av大片免费观看| av电影一区二区| 久热精品在线播放| 精品成人国产| 国产原创精品| 国产精品毛片久久久久久久久久99999999 | 国产精品爽黄69天堂a| 午夜av在线免费观看| 亚洲精选在线观看| 免费看日韩毛片| 成人免费视频播放| 天天干天天草天天| 一区二区三区精品视频在线观看| 亚洲一区二区三区免费观看| 99热播精品免费| 中文字幕最新精品| 无码国产精品一区二区色情男同| 亚洲五月六月丁香激情| 老头老太做爰xxx视频| 成人精品一区二区三区四区 | 日韩成人动漫| 欧美国产日韩一区二区| 精品国产乱码久久久久久蜜臀网站| 欧美性猛交xxxx| 在线观看日本中文字幕| 成人精品免费看| 日韩成人av免费| 久久激情中文| 亚洲精品无人区| 亚洲免费一区| 日本亚洲欧美三级| 超碰在线视屏| 国内揄拍国内精品| 超碰电影在线播放| 久久精品99久久香蕉国产色戒| 九色在线播放| 亚洲片国产一区一级在线观看| 69xxxx国产| 高跟丝袜一区二区三区| 久久精品视频国产| 久久久综合视频| 亚洲va在线va天堂va偷拍| 欧美激情自拍| 在线观看成人免费| 欧美激情777| 亚洲午夜精品一区二区三区| 精品久久影院| 亚洲高清资源综合久久精品| 狠狠做深爱婷婷综合一区| 久久国产主播精品| 日韩美女精品| 久久亚洲免费| 久久av影视| 日本亚洲导航| 日韩精品电影| 异国色恋浪漫潭| 亚洲精彩视频| www.一区二区.com| 欧美日韩少妇| 亚洲 自拍 另类小说综合图区| 影音先锋亚洲一区| 五十路熟女丰满大屁股| 日韩欧美高清| 亚洲一区二区在线观| 91视频一区| 国产人妻互换一区二区| 欧美另类专区| 黄色片网址在线观看| 亚洲少妇自拍| 爱情岛论坛vip永久入口| 欧美精品色网| 精品无码国产一区二区三区av| 在线视频观看日韩| 免费高清在线观看免费| 日韩av在线发布| 丰满的少妇愉情hd高清果冻传媒| 韩日在线一区| 欧美韩国日本在线| 蜜臀av在线播放一区二区三区| 热99这里只有精品| 久久精品三级| 日韩a一级欧美一级| 成人av影院在线| 91在线无精精品白丝| 亚洲欧美韩国综合色| 日本少妇在线观看| 亚洲欧美日韩一区二区| 久青草视频在线观看| 国产精品不卡视频| 久久久.www| 一本一道波多野结衣一区二区| 亚洲国产无线乱码在线观看| 欧美一级免费观看| 天天色天天操天天射| 日韩欧美激情四射| 国产乱码一区二区| 亚洲国产精品va在线看黑人动漫| 国产www免费观看| 亚洲精品国产精品国自产在线 | 免费拍拍拍网站| 美女性感视频久久| 丰满少妇xbxb毛片日本| 中文字幕欧美日本乱码一线二线| 印度午夜性春猛xxx交| 中文字幕人成不卡一区| 懂色av粉嫩av浪潮av| 亚洲一级不卡视频| 夜夜骚av一区二区三区| 亚洲精品视频免费| 四虎在线免费看| 不卡中文字幕av| √天堂8在线网| 国产91九色视频| 成人搞黄视频| 中文精品视频一区二区在线观看| 亚洲少妇诱惑| 美女日批在线观看| 国产精品99久久久| 4438x全国最大成人| 欧美国产丝袜视频| 亚洲国产成人精品激情在线| 日韩视频在线永久播放| 午夜激情视频在线观看| 国产99在线|中文| 极品一区美女高清| 蜜桃视频在线观看成人| 欧美日韩岛国| 五月天婷婷影视| 国产偷v国产偷v亚洲高清| 色播视频在线播放| 精品国产乱码91久久久久久网站| 美女写真理伦片在线看| 国产精品免费在线免费| 国产综合久久久| 97国产精东麻豆人妻电影| 99久久免费精品高清特色大片| 欧美又粗又大又长| 91精品国产色综合久久不卡蜜臀 | 亚洲欧洲一区二区在线观看| 香蕉久久夜色精品| 国产视频手机在线播放| 久久综合99re88久久爱| 国产成人愉拍精品久久| 亚洲国产精品国自产拍av秋霞| 啪啪免费视频一区| 91九色在线免费视频| 欧美成人中文| 性高潮久久久久久| 亚洲精品中文在线| 国产哺乳奶水91在线播放| 欧美成人剧情片在线观看| 中文字幕在线直播| 国产在线观看91精品一区| 荡女精品导航| 亚洲欧美日韩另类精品一区二区三区| 麻豆久久精品| 舐め犯し波多野结衣在线观看| 色天使色偷偷av一区二区| 精品黑人一区二区三区在线观看 | 欧美日韩精品中文字幕一区二区| 青青草原综合久久大伊人精品 | 蜜桃麻豆www久久国产精品| 亚久久调教视频| 香蕉视频黄色在线观看| 中文字幕一区二区三区四区 | 成人在线爆射| 日韩欧美亚洲在线| 欧美性久久久| 少妇熟女视频一区二区三区| 五月婷婷久久丁香| 国产又粗又猛又黄| 久久成人免费视频| 都市激情亚洲| 热久久精品免费视频| 国产精品久线在线观看| 国产视频91在线| 亚洲欧美999| 日韩美香港a一级毛片| 少妇久久久久久被弄到高潮| av中文字幕不卡| 中文字幕av无码一区二区三区| 久久艳片www.17c.com| 国产精品宾馆| 日韩av片网站| 一区二区三区自拍| 中文字幕在线观看国产| 久久香蕉国产线看观看网| 成人性生交大片免费看中文视频| www.中文字幕在线| 国产精品久久久久久妇女6080| 性生活视频软件| 成人97在线观看视频| 日韩av字幕| 国产精品999视频| 国产精品网曝门| 好吊色一区二区| 国产精品美女在线| 国产一区日韩欧美| 国产高清一区二区三区四区| 欧美一级高清片在线观看| 日韩三级影视| 黄色三级中文字幕| 国产片一区二区| 天天干天天干天天干| 成人在线免费观看视视频| 美女视频一区免费观看|