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

很多人連模糊匹配Like %xxx%怎么優化都不知道

數據庫 MySQL
在開發過程中,經常會碰到一些業務場景,需要以完全模糊匹配的方式查找數據,就會想到用 like %xxx% 或者 like %xxx 的方式去實現,而且即使列上有選擇率很高的索引,也不會被使用。在MySQL中可以通過ICP特性,全文索引,基于生成列索引解決這類問題,下面就從索引條件下推ICP,全文索引,基于生成列索引及如何利用它們解決模糊匹配的SQL性能問題。

在開發過程中,經常會碰到一些業務場景,需要以完全模糊匹配的方式查找數據,就會想到用 like %xxx% 或者 like %xxx 的方式去實現,而且即使列上有選擇率很高的索引,也不會被使用。

在MySQL中可以通過ICP特性,全文索引,基于生成列索引解決這類問題,下面就從索引條件下推ICP,全文索引,基于生成列索引及如何利用它們解決模糊匹配的SQL性能問題。

索引條件下推ICP

ICP介紹

MySQL 5.6開始支持ICP(Index Condition Pushdown),不支持ICP之前,當進行索引查詢時,首先根據索引來查找數據,然后再根據where條件來過濾,掃描了大量不必要的數據,增加了數據庫IO操作。

在支持ICP后,MySQL在取出索引數據的同時,判斷是否可以進行where條件過濾,將where的部分過濾操作放在存儲引擎層提前過濾掉不必要的數據,減少了不必要數據被掃描帶來的IO開銷。

在某些查詢下,可以減少Server層對存儲引擎層數據的讀取,從而提供數據庫的整體性能。

ICP具有以下特點

 ICP相關控制參數

index_condition_pushdown:索引條件下推默認開啟,設置為off關閉ICP特性。

  1. mysql>show variables like 'optimizer_switch'
  2. | optimizer_switch | index_condition_pushdown=on 
  3. # 開啟或者關閉ICP特性 
  4. mysql>set optimizer_switch = 'index_condition_pushdown=on | off'

ICP處理過程

假設有用戶表users01(id, name, nickname, phone, create_time),表中數據有11W。由于ICP只能用于二級索引,故在name,nickname列上創建復合索引idx_name_nickname(name,nickname),分析SQL語句select * from users01 where name = 'Lyn' and nickname like '%SK%'在ICP關閉和開啟下的執行情況。

關閉ICP特性的SQL性能分析

 開啟profiling進行跟蹤SQL執行期間每個階段的資源使用情況。

  1. mysql>set profiling  = 1; 

關閉ICP特性分析SQL執行情況

  1. mysql>set optimizer_switch = 'index_condition_pushdown=off'

  1. mysql>explain select * from users01 where name = 'Lyn' and nickname like '%SK%'
  2. |  1 | SIMPLE      | users01 | NULL       | ref  | idx_name_nickname | idx_name_nickname | 82      | const | 29016 |   100.00 | Using where | 
  3. #查看SQL執行期間各階段的資源使用 
  4. mysql>show profile cpu,block io for query 2; 
  5. | Status                         | Duration | CPU_user | CPU_system | Block_ops_in | Block_ops_out | 
  6. +--------------------------------+----------+----------+------------+--------------+---------------+ 
  7. | starting                       | 0.000065 | 0.000057 |   0.000009 |            0 |             0 | 
  8. .................. 
  9. | executing                      | 0.035773 | 0.034644 |   0.000942 |            0 |             0 |#執行階段耗時0.035773秒。 
  10. end                            | 0.000015 | 0.000006 |   0.000009 |            0 |             0 | 
  11. #status狀態變量分析 
  12. | Handler_read_next | 16384          |  ##請求讀的行數 
  13. | Innodb_data_reads | 2989           |  #數據物理讀的總數 
  14. | Innodb_pages_read | 2836           |  #邏輯讀的總數 
  15. | Last_query_cost   | 8580.324460    |  #SQL語句的成本COST,主要包括IO_COST和CPU_COST。 

通過explain分析執行計劃,SQL語句在關閉CP特性的情況下,走的是復合索引idx_name_nickname,Extra=Using Where,首先通過復合索引 idx_name_nickname 前綴從存儲引擎中讀出 name = 'Lyn' 的所有記錄,然后在Server端用where 過濾 nickname like '%SK%' 情況。

Handler_read_next=16384說明掃描了16384行的數據,SQL實際返回只有12行數,耗時50ms。對于這種掃描大量數據行,只返回少量數據的SQL,可以從兩個方面去分析。

1.索引選擇率低:對于符合索引(name,nickname),name作為前導列出現 where 條件,CBO都會選擇走索引,因為掃描索引比全表掃描的COST要小,但由于 name 列的基數不高,導致掃描了索引中大量的數據,導致SQL性能也不太高。

Column_name: name Cardinality: 6 可以看到users01表中name的不同的值只有6個,選擇率6/114688很低。

2.數據分布不均勻:對于where name = ?來說,name數據分布不均勻時,SQL第一次傳入的值返回結果集很小,CBO就會選擇走索引,同時將SQL的執行計劃緩存起來,以后不管name傳入任何值都會走索引掃描,這其實是不對的,如果傳入name的值是Fly100返回表中80%的數據,這是走全表掃描更快。

  1. name      | count(*) | 
  2. +---------------+----------+ 
  3. | Grubby        |    12    | 
  4. | Lyn           |    1000  | 
  5. | Fly100        |    98100 | 

在MySQL 8.0推出了列的直方圖統計信息特性,主要針對索引列數據分布不均勻的情況進行優化。

開啟ICP特性的性能分析 

 開啟ICP特性分析SQL執行情況 

  1. mysql>set optimizer_switch = 'index_condition_pushdown=on'

  1. #執行計劃 
  2. |  1 | SIMPLE      | users01 | NULL       | ref  | idx_name_nickname | idx_name_nickname | 82      | const | 29016 |    11.11 | Using index condition | 
  3. #status狀態變量分析 
  4. | Handler_read_next | 12             | 
  5. | Innodb_data_reads | 2989           | 
  6. | Innodb_pages_read | 2836           | 
  7. | Last_query_cost   | 8580.324460    | 

從執行計劃可以看出,走了復合索引 idx_name_nickname,Extra=Using index condition,且只掃描了12行數據,說明使用了索引條件下推ICP特性,SQL總共耗時10ms,跟關閉ICP特性下相比,SQL性能提升了5倍。

開啟ICP特性后,由于 nickname 的 like 條件可以通過索引篩選,存儲引擎層通過索引與 where 條件的比較來去除不符合條件的記錄,這個過程不需要讀取記錄,同時只返回給Server層篩選后的記錄,減少不必要的IO開銷。

Extra顯示的索引掃描方式

  • using where:查詢使用索引的情況下,需要回表去查詢所需的數據。
  • using index condition:查詢使用了索引,但是需要回表查詢數據。
  • using index:查詢使用覆蓋索引的時候會出現。
  • using index & using where:查詢使用了索引,但是需要的數據都在索引列中能找到,不需要回表查詢數據。

模糊匹配改寫優化

在開啟ICP特性后,對于條件where name = 'Lyn' and nickname like '%SK%' 可以利用復合索引 (name,nickname) 減少不必要的數據掃描,提升SQL性能。但對于 where nickname like '%SK%'完全模糊匹配查詢能否利用ICP特性提升性能?首先創建nickname上單列索引 idx_nickname。

  1. mysql>alter table users01 add index idx_nickname(nickname); 
  2. #SQL執行計劃 
  3. |  1 | SIMPLE      | users01 | NULL       | ALL  | NULL          | NULL | NULL    | NULL | 114543 |    11.11 | Using where | 

從執行計劃看到 type=ALL,Extra=Using where 走的是全部掃描,沒有利用到ICP特性。

輔助索引idx_nickname(nickname)內部是包含主鍵id的,等價于(id,nickname)的復合索引,嘗試利用覆蓋索引特性將SQL改寫為 select Id from users01 where nickname like '%SK%' 。

  1. |  1 | SIMPLE      | users01 | NULL       | index | NULL          | idx_nickname | 83      | NULL | 114543 |    11.11 | Using where; Using index | 

從執行計劃看到,type=index,Extra=Using where; Using index,索引全掃描,但是需要的數據都在索引列中能找到,不需要回表。利用這個特點,將原始的SQL語句先獲取主鍵id,然后通過id跟原表進行關聯,分析其執行計劃。

  1. select  * from users01 a , (select id from users01 where nickname like '%SK%') b where a.id = b.id; 

  1. |  1 | SIMPLE      | users01 | NULL       | index  | PRIMARY       | idx_nickname | 83      | NULL            | 114543 |    11.11 | Using where; Using index | 
  2. |  1 | SIMPLE      | a       | NULL       | eq_ref | PRIMARY       | PRIMARY      | 4       | test.users01.id |      1 |   100.00 | NULL                     | 

從執行計劃看,走了索引idx_nickname,不需要回表訪問數據,執行時間從60ms降低為40ms,type = index 說明沒有用到ICP特性,但是可以利用 Using where; Using index 這種索引掃描不回表的方式減少資源開銷來提升性能。

全文索引

MySQL 5.6開始支持全文索引,可以在變長的字符串類型上創建全文索引,來加速模糊匹配業務場景的DML操作。它是一個inverted index(反向索引),創建 fulltext index 時會自動創建6個 auxiliary index tables(輔助索引表),同時支持索引并行創建,并行度可以通過參數 innodb_ft_sort_pll_degree 設置,對于大表可以適當增加該參數值。

刪除全文索引的表的數據時,會導致輔助索引表大量delete操作,InnoDB內部采用標記刪除,將已刪除的DOC_ID都記錄特殊的FTS_*_DELETED表中,但索引的大小不會減少,需要通過設置參數innodb_optimize_fulltext_only=ON 后,然后運行OPTIMIZE TABLE來重建全文索引。

全文索引特征

兩種檢索模式

  • IN NATURAL LANGUAGE MODE:默認模式,以自然語言的方式搜索,AGAINST('看風' IN NATURAL LANGUAGE MODE ) 等價于AGAINST('看風')。
  • IN BOOLEAN MODE:布爾模式,表是字符串前后的字符有特殊含義,如查找包含SK,但不包含Lyn的記錄,可以用+,-符號。

AGAINST('+SK -Lyn' in BOOLEAN MODE);

 

這時查找 nickname like '%Lyn%' ,通過反向索引關聯數組可以知道,單詞Lyn存儲于文檔4中,然后定位到具體的輔助索引表中。

全文索引分析

對表users01的nickname添加支持中文分詞的全文索引

  1. mysql>alter table users01 add fulltext index idx_full_nickname(nickname) with parser ngram; 

查看數據分布

  1. #設置當前的全文索引表 
  2. mysql>set global innodb_ft_aux_table = 'test/users01'
  3. #查看數據文件 
  4. mysql>select * from information_schema.innodb_ft_index_cache; 
  5. +--------+--------------+-------------+-----------+--------+----------+ 
  6. | WORD   | FIRST_DOC_ID | LAST_DOC_ID | DOC_COUNT | DOC_ID | POSITION | 
  7. +--------+--------------+-------------+-----------+--------+----------+ 
  8. ............. 
  9. | 看風   |            7 |           7 |         1 |      7 |        3 | 
  10. | 笑看   |            7 |           7 |         1 |      7 |        0 | 

全文索引相關對象分析

  1. #全文索引對象分析 
  2. mysql>SELECT table_id, namespace from INFORMATION_SCHEMA.INNODB_TABLES where name like 'test/%'
  3. |     1198 | test/users01                                       |   139 | 
  4. #存儲被標記刪除同時從索引中清理的文檔ID,其中_being_deleted_cache是_being_deleted表的內存版本。 
  5. |     1199 | test/fts_00000000000004ae_being_deleted            |   140 | 
  6. |     1200 | test/fts_00000000000004ae_being_deleted_cache      |   141 | 
  7. #存儲索引內部狀態信息及FTS_SYNCED_DOC_ID 
  8. |     1201 | test/fts_00000000000004ae_config                   |   142 |  
  9. #存儲被標記刪除但沒有從索引中清理的文檔ID,其中_deleted_cache是_deleted表的內存版本。 
  10. |     1202 | test/fts_00000000000004ae_deleted                  |   143 | 
  11. |     1203 | test/fts_00000000000004ae_deleted_cache            |   144 | 

模糊匹配優化

對于SQL語句后面的條件 nickname like '%看風%' 默認情況下,CBO是不會選擇走nickname索引的,該寫SQL為全文索引匹配的方式:match(nickname) against('看風')

  1. mysql>explain select * from users01 where match(nickname) against('看風'); 
  2. |  1 | SIMPLE      | users01 | NULL       | fulltext | idx_full_nickname | idx_full_nickname | 0       | const |    1 |   100.00 | Using where; Ft_hints: sorted | 

使用了全文索引的方式查詢,type=fulltext,同時命中全文索引 idx_full_nickname,從上面的分析可知,在MySQL中,對于完全模糊匹配%%查詢的SQL可以通過全文索引提高效率。

生成列

MySQL 5.7開始支持生成列,生成列是由表達式的值計算而來,有兩種模式:VIRTUAL和STORED,如果不指定默認是VIRTUAL,創建語法如下:

  1. col_name data_type [GENERATED ALWAYS] AS (expr)  [**VIRTUAL** | **STORED**] [NOT NULL | NULL

 

生成列特征

  • VIRTUAL生成列用于復雜的條件定義,能夠簡化和統一查詢,不占用空間,訪問列是會做計算。
  • STORED生成列用作物化緩存,對于復雜的條件,可以降低計算成本,占用磁盤空間。
  • 支持輔助索引的創建,分區以及生成列可以模擬函數索引。
  • 不支持存儲過程,用戶自定義函數的表達式,NONDETERMINISTIC的內置函數,如NOW(), RAND()以及不支持子查詢

生成列使用

  1. #添加基于函數reverse的生成列reverse_nickname 
  2. mysql>alter table users01 add reverse_nickname varchar(200) generated always as (reverse(nickname)); 
  3. #查看生成列信息 
  4. mysql>show columns from users01; 
  5. | reverse_nickname | varchar(200) | YES  |     | NULL              | VIRTUAL GENERATED | #虛擬生成列 

模糊匹配優化

對于where條件后的 like '%xxx' 是無法利用索引掃描,可以利用MySQL 5.7的生成列模擬函數索引的方式解決,具體步驟如下:

  1. 利用內置reverse函數將like '%風云'反轉為like '云風%',基于此函數添加虛擬生成列。
  2. 在虛擬生成列上創建索引。
  3. 將SQL改寫成通過生成列like reverse('%風云')去過濾,走生成列上的索引。

添加虛擬生成列并創建索引。

  1. mysql>alter table users01 add reverse_nickname varchar(200) generated always as (reverse(nickname)); 
  2. mysql>alter table users01 add index idx_reverse_nickname(reverse_nickname); 
  3. #SQL執行計劃 
  4. |  1 | SIMPLE      | users01 | NULL       | range | idx_reverse_nickname | idx_reverse_nickname | 803     | NULL |    1 |   100.00 | Using where | 

可以看到對于 like '%xxx' 無法使用索引的場景,可以通過基于生成列的索引方式解決。

總結

介紹了索引條件下推ICP特性,全文索引以以及生成列特性,利用這些特性可以對模糊匹配 like %xxx% 或 like %xxx 的業務SQL進行優化,可以有效降低不必要的數據讀取,減少IO掃描以及CPU開銷,提高服務的穩定性。

對于MySQL每個版本發布的新特性,尤其是跟優化器和SQL相關的,應該去關注和了解,可能會發現適合自己業務場景的特性。

我是敖丙,你知道的越多,你不知道的越多,我們下期見。

 

責任編輯:姜華 來源: 三太子敖丙
相關推薦

2022-12-05 15:23:33

JavaScript技巧運算符

2021-08-27 10:03:12

人工智能AI

2018-08-10 10:36:25

SSL證書誤區

2020-06-29 08:28:36

v-for 解構函數

2021-01-15 05:39:13

HashMapHashTableTreeMap

2020-07-01 08:36:43

CSS規范web

2023-06-05 08:07:34

聚集索引存儲數據

2020-07-14 08:43:54

VueHTML函數

2019-12-13 19:52:29

人工智能AI

2015-07-22 11:53:29

云計算AWS分析癱瘓

2021-08-24 00:13:23

Windows 10Windows微軟

2021-05-08 23:19:25

微信存儲小程序

2021-02-07 12:33:06

Dubbo線程池監控

2025-05-29 01:55:00

Vue3.5API性能

2020-12-21 09:00:04

MySQL緩存SQL

2019-01-07 09:27:39

2020-07-07 08:35:53

VueKey組件

2020-12-21 09:44:53

MySQL查詢緩存數據庫

2023-01-05 23:18:06

CPU線程

2019-05-21 15:43:59

CIO云計算成本
點贊
收藏

51CTO技術棧公眾號

欧美日韩一区国产| 久久久综合九色合综国产精品| 久久精品欧美视频| 男人女人拔萝卜视频| 8x8ⅹ拨牐拨牐拨牐在线观看| 成人99免费视频| 国产精品国产福利国产秒拍| 欧美黑人猛猛猛| 色先锋久久影院av| 精品视频999| 日韩中字在线观看| porn视频在线观看| 亚洲图色一区二区三区| 亚洲一本大道在线| 日韩三级电影免费观看| 亚洲av无码国产精品永久一区| 免费日韩一区二区| 久久久精品在线观看| 天堂www中文在线资源| www.久久.com| 亚洲图片欧美综合| 亚洲欧洲一区二区福利| 色网站免费观看| 男男成人高潮片免费网站| 欧美国产视频一区二区| 国产高清一区二区三区四区| 综合久久成人| 91精品久久久久久久99蜜桃 | 午夜精品一区二区三区国产| 亚洲国产精品va在看黑人| 亚洲娇小娇小娇小| 新版的欧美在线视频| 亚洲黄色免费电影| 特级西西444www大精品视频| 日韩一级在线播放| 国产一区二区精品在线观看| 国产成人涩涩涩视频在线观看| 国产精久久久久久| 久久久9色精品国产一区二区三区| 亚洲欧美制服另类日韩| 男男一级淫片免费播放| 国产视频一区二区在线播放| 欧美日韩小视频| 99免费视频观看| 欧美亚洲日本精品| 亚洲制服丝袜在线| 亚洲中文字幕无码一区二区三区| 在线播放毛片| 国产精品美女视频| 欧美亚洲另类久久综合| 四虎在线免费看| 99国产精品国产精品毛片| 99视频免费观看| av网站在线免费看| 韩日精品视频一区| 国产在线视频一区| 91亚洲精品国偷拍自产在线观看 | 久久久久无码精品| 国产视频一区二区在线播放| 欧美一区二区精品| 欧美日韩理论片| 精品国产鲁一鲁****| 337p亚洲精品色噜噜噜| 久久精品一二三四| 亚洲精品国产九九九| 日韩欧美国产精品| 91人妻一区二区| 精品少妇3p| 精品亚洲永久免费精品 | 成人av免费播放| 国产福利视频一区二区三区| 国产精品久久精品国产| 熟妇人妻中文av无码| av成人动漫在线观看| 精品无人乱码一区二区三区的优势| 色婷婷av一区二区三| www国产精品av| 秋霞毛片久久久久久久久| av在线免费观看网站| 日韩一区在线播放| 欧美国产视频一区| 中文字幕在线高清| 欧美色电影在线| 波多野结衣在线免费观看| 伊人久久影院| 精品一区二区三区三区| 老司机福利在线观看| 午夜视频一区| 91豆花精品一区| 在线免费观看一区二区| 国产精品亚洲午夜一区二区三区| 国产一区二区不卡视频| 噜噜噜噜噜在线视频| 国产精品高潮呻吟| 日韩 欧美 视频| 日韩欧美看国产| 91精品国产一区二区三区| 亚洲一级av无码毛片精品| 精品国产91乱码一区二区三区四区 | 4444欧美成人kkkk| 中文字幕自拍偷拍| caoporen国产精品视频| 亚洲在线欧美| 理论不卡电影大全神| 欧美日韩国产成人在线91| 少妇伦子伦精品无吗| 国模吧精品视频| 欧美黄色片视频| 探花国产精品一区二区| 国产aⅴ综合色| 亚洲欧美日韩精品久久久 | 国产不卡精品视男人的天堂| 国产美女www爽爽爽视频| 91麻豆国产香蕉久久精品| 性做爰过程免费播放| 成人日韩精品| 亚洲国产精品成人精品| 免费在线观看黄色小视频| 欧美亚洲自偷自偷| 成人免费在线一区二区三区| gogogo高清在线观看免费完整版| 亚洲成人av福利| 福利视频999| 精品国产1区| 26uuu另类亚洲欧美日本老年| 午夜精品久久久久久久爽| 国产精品久久久久桃色tv| 国产资源在线视频| 一区二区三区高清在线观看| 久久精品国产视频| 日本三级一区二区三区| 99精品热视频| 国产va亚洲va在线va| 国产乱码精品一区二区三区亚洲人| 亚洲人成自拍网站| 国产一级中文字幕| 国产精品亚洲午夜一区二区三区 | 青青草视频在线免费直播| 欧美日韩精品是欧美日韩精品| xxxx日本黄色| 久久精品国产清高在天天线| 精品国产一区二区三区日日嗨| 在线中文字幕第一页| 欧美电影一区二区| 青青草自拍偷拍| 蜜桃一区二区三区在线| 五月天亚洲综合| 欧美日韩精品免费观看视欧美高清免费大片| 亚洲第一色在线| 精品少妇久久久| 成人一区二区三区视频在线观看| 免费看黄色a级片| 中文字幕av一区二区三区四区| 久久中文久久字幕| jlzzjlzzjlzz亚洲人| 亚洲欧美日韩系列| 国产农村妇女精品久久| 欧美激情日韩| www.久久草| 国产探花在线观看| 精品福利视频一区二区三区| 国产一级淫片免费| 91伊人久久大香线蕉| 国产精品视频一区二区三区四区五区| 人人精品亚洲| 日本欧美一二三区| 高清在线观看av| 欧美日韩午夜在线视频| www.av免费| 成人性色生活片免费看爆迷你毛片| 韩日视频在线观看| 老司机精品在线| 日本免费久久高清视频| 婷婷成人激情| 欧美成人乱码一区二区三区| 国产午夜精品无码| 久久久久久久免费视频了| 亚洲精品怡红院| 亚洲国产日韩欧美在线| 国产精品免费一区二区| 肉色欧美久久久久久久免费看| 日韩小视频在线观看| 精品二区在线观看| 精品美女国产在线| 大吊一区二区三区| 国产成人精品影视| 黑人糟蹋人妻hd中文字幕 | 久久久久久久久久看片| 午夜久久久精品| 亚洲午夜精品久久久久久app| 久久精品成人一区二区三区蜜臀| 精品裸体bbb| 久久久久久中文| 国产一级免费在线观看| 日韩欧美另类在线| 久久精品视频5| 又紧又大又爽精品一区二区| 美女爆乳18禁www久久久久久| 精品一区二区三区在线观看国产 | 九九在线观看视频| 久久久亚洲精品一区二区三区| 五月天视频在线观看| 一本色道久久综合一区| 午夜一区二区三区| 欧洲亚洲视频| 亚洲自拍小视频| 97成人资源| 色综合色综合久久综合频道88| 九色蝌蚪在线| 精品国免费一区二区三区| 中文字幕免费观看视频| 亚洲成年人影院| 天天爽天天爽天天爽| 93久久精品日日躁夜夜躁欧美| 亚洲精品视频三区| 日韩不卡一二三区| 男人日女人视频网站| 99久久精品国产亚洲精品 | 色欧美日韩亚洲| 国产精品.www| 亚洲女同一区二区| 大胸美女被爆操| 久久久www成人免费无遮挡大片| 手机看片国产精品| 久久国产生活片100| 日韩精品一区二区三区不卡| 亚洲第一精品影视| 久久最新免费视频| 成人av国产| 欧美日韩无遮挡| 精品女人视频| 国产伦视频一区二区三区| 亚洲日本va| 91在线视频导航| av在线亚洲一区| 国产日韩欧美在线视频观看| 国产一区一一区高清不卡| 日本久久久久久| 日韩理论视频| 欧美亚洲成人精品| bl在线肉h视频大尺度| 欧美国产激情18| 日本大片在线播放| 久久91亚洲人成电影网站| 国产人成网在线播放va免费| 日韩一区二区福利| 欧洲不卡视频| 日韩一区二区三区国产| 永久免费av在线| 日韩在线观看av| 老司机在线视频二区| 精品国内产的精品视频在线观看| 1024免费在线视频| 久久久精品免费| av免费看在线| 欧美国产乱视频| av电影免费在线看| 91精品国产777在线观看| 欧美激情20| 国产91在线播放精品91| 日韩成人亚洲| 成人国产精品av| 美女日韩一区| 国产伦精品一区二区| 亚洲人成网亚洲欧洲无码| 日本欧美精品久久久| 欧美高清视频手机在在线| 欧美日韩在线免费观看视频| 国产精品多人| 亚洲精品无码久久久久久| 日本不卡高清视频| 国产女同无遮挡互慰高潮91| 国产馆精品极品| 538国产视频| 欧美激情中文字幕| 曰本女人与公拘交酡| 亚洲va韩国va欧美va| av黄色在线播放| 欧美日本在线一区| 亚洲国产一二三区| 国产视频在线一区二区| 2021av在线| 国内精品国产三级国产在线专| jizz内谢中国亚洲jizz| 国产精品视频一区二区高潮| 国产精品免费精品自在线观看| 成人动漫视频在线观看免费| 台湾佬综合网| 宅男av一区二区三区| 亚洲无线视频| 特级丰满少妇一级| 高清日韩电视剧大全免费| 性高潮久久久久久久| 亚洲免费观看高清完整版在线观看熊| 国产无遮挡又黄又爽| 欧美三级日韩三级| 少妇精品高潮欲妇又嫩中文字幕 | 蜜臀av在线播放一区二区三区| 久久久久久久久久影视| 亚洲国产精品av| 91香蕉在线视频| 制服.丝袜.亚洲.中文.综合| 色鬼7777久久| 久久91亚洲精品中文字幕| 视频一区在线免费看| 国产成人免费观看| 先锋资源久久| 密臀av一区二区三区| 波多野结衣精品在线| 国产午夜精品理论片在线| 日本二三区不卡| 日本激情一区二区| 操91在线视频| 四虎精品在线观看| 日本一区二区免费看| 国产欧美丝祙| 欧美图片自拍偷拍| 亚洲三级免费电影| 中文字幕免费视频观看| 日韩成人中文电影| 久久免费电影| 91久久偷偷做嫩草影院| 97精品一区| 免费看污污网站| 欧美激情在线观看视频免费| 视频一区二区三区四区五区| 欧美精品一区二区高清在线观看| caopo在线| 亚洲淫片在线视频| 欧美电影《轻佻寡妇》| 亚洲欧美另类动漫| 国产午夜精品一区二区三区视频| 国产午夜小视频| 日韩午夜激情av| 黄网址在线观看| 性亚洲最疯狂xxxx高清| h视频久久久| 黄色成人在线免费观看| 久久国产精品一区二区| 国产精品亚洲无码| 色呦呦国产精品| 日本高清视频免费看| 久久久久久久久久久av| 国产电影一区| 欧美理论一区二区| 影音先锋在线一区| 国产艳妇疯狂做爰视频 | 国产91富婆露脸刺激对白| 国语对白在线播放| 欧美一区二区在线观看| a级片国产精品自在拍在线播放| 国产欧美一区二区三区在线 | 中文字幕一区二区三区四区五区人 | 中文字幕一二区| 色妞一区二区三区| 亚洲福利影视| avove在线观看| 国产激情91久久精品导航| 青青操国产视频| 日韩一卡二卡三卡| 超碰公开在线| 99re国产视频| 中日韩男男gay无套| 加勒比精品视频| 色婷婷久久一区二区三区麻豆| 麻豆国产在线播放| 国产精品久在线观看| 欧美国产一区二区三区激情无套| 老司机久久精品| 一区二区三区精品| 色婷婷在线视频| 国产精品免费网站| 色综合天天综合网中文字幕| 亚洲av无一区二区三区久久| 亚洲香蕉伊在人在线观| 国产视频在线观看免费| 2019精品视频| 狠狠综合久久av一区二区蜜桃| 毛片毛片毛片毛| 亚洲一区二区3| 精品99又大又爽又硬少妇毛片| 国产精品视频免费在线| 91久久国产| 亚洲视频在线播放免费| 一级女性全黄久久生活片免费| 亚洲日本中文字幕在线| 国产精品久久久久久久久久99| 欧美在线三级| av av在线| 欧美日韩亚洲国产综合| 日本孕妇大胆孕交无码| 日韩av高清在线播放| 国产一区日韩二区欧美三区| 国产免费无码一区二区视频| 国产午夜精品理论片a级探花| 免费在线观看一区| 欧美成人三级在线视频| 国产欧美一区二区三区鸳鸯浴 | rebdb初裸写真在线观看| 亚洲人一区二区|