黄a在线观看-黄a在线-黄a大片-黄色片在线看-黄色毛片免费-黄色大片网站

您的位置:首頁技術文章
文章詳情頁

MySql中的Full Text Search全文索引優化

瀏覽:186日期:2023-05-08 10:17:32
目錄
  • 開篇
  • 一個簡單的DEMO
  • 天下沒有免費的午餐
  • 無索引
  • 使用 B 樹索引
  • 引入反向索引
  • 在默認解析器中使用反向索引
  • 在 n-gram 解析器中使用反向索引
  • InnoDB 反向索引性能下降
  • 備選方案

開篇

在我們的生產環境中,有一個模糊檢索的文檔框,但是當數據量級別上去之后,頻繁對數據庫造成壓力,所以想使用Full Text全文索引進行優化 下面是一個總結的簡單案例

一個簡單的DEMO

假設我們有客戶的地址簿,目標是通過他/她的姓名或電子郵件快速找到人

CREATE TABLE `address_book` (
    `id` BIGINT UNSIGNED NOT NULL AUTO_INCREMENT,
    `name` VARCHAR(128) NOT NULL,
    `email` VARCHAR(128) NOT NULL,
    PRIMARY KEY (`id`)
) ENGINE=InnoDB CHARSET=utf8mb4;

我們將用 1_000_000 個隨機生成的人填充地址簿。每個人將被插入單獨的查詢中。姓名將始終采用整齊的形式 - 名字和姓氏。電子郵件會更加混亂——名字/姓氏的順序和存在不同,分隔符不同,并且有一些隨機數。

> SELECT `name`, `email` FROM `addressbook` LIMIT 8;
+--------------------+---------------------------------+
| name       | email   |
+--------------------+---------------------------------+
| Reed Slavik| 664-slavik-reed@example.com     |
| Reilly Isaacson    | reilly972isaacson@example.com   |
| Theodore Klosinski | 942.klosinski@example.com       |
| Duncan Sinke       | 912.duncan@example.com  |
| Maranda Cabrara    | cabrara-809-maranda@example.com |
| Hugh Harrop| hugh765@example.com     |
| Bernard Luetzow    | bernard887luetzow@example.com   |
| Niki Manesis       | niki-247@example.com    |
+--------------------+---------------------------------+

測試將在具有默認配置的庫存 MySQL 8.0.32 Docker 映像上執行(除非另有說明)。硬件是 AMD 6800U、32GB RAM、PCIe NVMe 4.0 x4 SSD。操作系統是帶有 BTRFS 和 LUKS 磁盤加密的 vanilla Arch Linux。

天下沒有免費的午餐

天下沒有免費的午餐。索引加快SELECT但減慢INSERT//語句,因為計算的額外 CPU 成本以及額外的磁盤傳輸和存儲空間成本UPDATE。DELETE我會嘗試寫簡短的總結何時使用每種方法,有什么好處和缺點。

無索引

最簡單的方法是沒有索引列并使用LIKE '%john%'語法。

因為沒有索引維護這種方法不會增加數據加載時間和存儲空間。

$ time cat address_book.sql | mysql
real    23m 31.43s
> SELECT data_length, index_length FROM information_schema.tables WHERE table_name = "address_book";
+-------------+--------------+
| DATA_LENGTH | INDEX_LENGTH |
+-------------+--------------+
|    71942144 |    0 |
+-------------+--------------+

性能很差。當沒有使用索引時,MySQL 使用 Turbo Boyer-Moore 算法 來查找匹配的行。

> SELECT * FROM `address_book` WHERE `name` LIKE "%john%" AND `name` LIKE "%doe%";
+--------+----------------+-------------------------------+
| id     | name   | email |
+--------+----------------+-------------------------------+
| 222698 | Johnie Doemel  | doemel.36.johnie@example.com  |
| 316137 | Johnnie Doepel | johnnie-doepel-72@example.com |
+--------+----------------+-------------------------------+
2 rows in set (0.222 sec)

如查詢所示,所有行都需要從磁盤中提取以進行分析EXPLAIN。

> EXPLAIN SELECT * FROM `address_book` WHERE `name` LIKE "%john%" AND `name` LIKE "%doe%"\G
   id: 1
  select_type: SIMPLE
table: address_book
   partitions: NULL
 type: ALL
possible_keys: NULL
  key: NULL
      key_len: NULL
  ref: NULL
 rows: 996458
     filtered: 1.23
Extra: Using where

使用: 當您的應用程序很少進行全文搜索并且您愿意接受低查詢性能時。在小數據集上效果很好。簡單的實施是巨大的好處。

避免: 當頻繁??使用全文搜索時——你會在這里消耗大量的數據庫性能,尤其是在大數據集上。此外,由于全行掃描,它可能會阻止應用程序中需要FOR UPDATE鎖定此類表的其他查詢。

使用 B 樹索引

不幸的是,在一個字段上打一個索引并稱之為一天是行不通的。在 B 樹索引中,文本從搜索短語的開始到結束被轉換為一系列二元(真/假)測試樹。對于示例數據:

1 John
2 Joseph
3 Joseph
4 Ann

它看起來像這樣。

   <="a"?
    /  \
  yes   no
  /       \
     <="nn"?     <="jo"
       /  /
     yesyes
     /  /
   [4]      <="h"?
     /  \
   yes   no
   /      \
<="n"?    <="seph"?
 /  /
       yesyes
       /  /
     [1][2,3]

如果你正在尋找Joseph你測試第一個字符。因為j>a你經過no路徑。然后你測試前兩個字符。因為jo=jo你從短語中刪除它們并通過yes路徑。然后你測試下一個不匹配的字符是h......你繼續執行這些系列的測試,直到你最終到達包含你正在尋找的短語的行列表,在這種情況下是23。但這表明這種類型的索引必須從短語的開始到結束起作用,這意味著短語不能以通配符開頭。

讓我們把它添加到我們的表中。

> ALTER TABLE `address_book` ADD KEY (`name`), ADD KEY (`email`);

如您所見,當搜索的短語以通配符索引開頭時將不會被使用。

> EXPLAIN SELECT * FROM `address_book` WHERE `name` LIKE "%john%" AND `name` LIKE "%doe%"\G
   id: 1
  select_type: SIMPLE
table: address_book
   partitions: NULL
 type: ALL
possible_keys: NULL
  key: NULL
      key_len: NULL
  ref: NULL
 rows: 996458
     filtered: 1.23
Extra: Using where

如果您知道文本具有某種特定結構(在我們的例子中,名稱在前),我們可以利用這些知識并在不使用通配符的情況下詢問名稱。

> SELECT * FROM `address_book` WHERE `name` LIKE "john%" AND `name` LIKE "%doe%";
+--------+----------------+-------------------------------+
| id     | name   | email |
+--------+----------------+-------------------------------+
| 222698 | Johnie Doemel  | doemel.36.johnie@example.com  |
| 316137 | Johnnie Doepel | johnnie-doepel-72@example.com |
+--------+----------------+-------------------------------+
2 rows in set (0.003 sec)

Explain 顯示這次使用了索引,所有以 開頭的名稱john都在索引中找到,并且 Boyer-Moore 必須僅用于針對 對該集合進行精細過濾doe

> EXPLAIN SELECT * FROM `address_book` WHERE `name` LIKE "john%" AND `name` LIKE "%doe%"\G
   id: 1
  select_type: SIMPLE
table: address_book
   partitions: NULL
 type: range
possible_keys: name
  key: name
      key_len: 514
  ref: NULL
 rows: 3602
     filtered: 100.00
Extra: Using index condition

當涉及到電子郵件時,這種方法很快就會顯示出局限性。它太混亂了——可能以名字開頭,可能以姓氏開頭,甚至可能以完全不同的東西開頭。在這種情況下,查詢時間就像沒有索引的情況一樣。

> SELECT * FROM `address_book` WHERE `email` LIKE "%john%" AND `email` LIKE "%doe%";
+--------+----------------+-------------------------------+
| id     | name   | email |
+--------+----------------+-------------------------------+
| 222698 | Johnie Doemel  | doemel.36.johnie@example.com  |
| 316137 | Johnnie Doepel | johnnie-doepel-72@example.com |
+--------+----------------+-------------------------------+
2 rows in set (0.314 sec)

在性能方面,它會稍微減慢數據加載速度并使存儲空間增加一倍,但并不是很有用。

$ time cat address_book.sql | mysql
real    24m 12.81s
> SELECT data_length, index_length FROM information_schema.tables WHERE table_name = "address_book";
+-------------+--------------+
| DATA_LENGTH | INDEX_LENGTH |
+-------------+--------------+
|    71942144 |    112623616 |
+-------------+--------------+

使用: 當您可以將文本拆分為具有自己索引的明確定義的列時。例如重組表以單獨first_name存儲last_name。此外,您必須愿意犧牲起始通配符。

避免: 當文本太不可預測和無序時,例如emailname商店中的各種產品。

注意:從右到左的語言也不例外,搜索的詞組不能以通配符開頭,無論文字的方向是什么。

引入反向索引

首先讓我們解釋一下什么是反向索引。B樹索引是對搜索短語從頭到尾的一系列測試。反向索引采用不同的方法,它從單詞創建標記。Token 可以是整個單詞或 n-gram(來自單詞的給定長度的子串,對于Johnie3 個字母的 n-gram 是:johohnhninie)。

這允許以稍微不同的方式構建索引。對于示例數據:

1 Paul
2 Roland
3 Carol

3 個字母的 n-gram 標記的索引將如下所示:

pau => [p1r1] # that means this n-gram is at position 1 in row 1
aul => [p2r1]
rol => [p1r2,p3r3]
ola => [p2r2]
lan => [p3r2]
and => [p4r2]
car => [p1r3]
aro => [p2r3]

現在,如果我們查找,rol我們會立即知道此標記存在于 rows2和中3。如果我們搜索更長的短語,比如roland數據庫可能會使用這個索引兩次——如果rol在某個位置找到,那么and必須在 3 個字符之后找到。只有行2符合此條件。

在默認解析器中使用反向索引

反向索引有它自己的語法,讓我們在我們的表中添加一個。

ALTER TABLE `address_book` ADD FULLTEXT (`name`), ADD FULLTEXT(`email`);

默認分詞器使用詞邊界來查找分詞,這意味著一個連續的詞就是一個分詞。

要利用全文索引MATCH () AGAINST ()語法必須使用。AGAINSTsection 可以在NATURAL LANGUAGE MODE搜索文本也被標記化的地方工作,或者在BOOLEAN包含它自己強大的迷你表達式語言的更有用的模式下工作。我不會深入探討BOOLEAN MODE語法,基本上是+AND.

> SELECT * FROM `address_book` WHERE MATCH (`name`) AGAINST ("+johnie +doemel" IN BOOLEAN MODE);
+--------+---------------+------------------------------+
| id     | name  | email|
+--------+---------------+------------------------------+
| 222698 | Johnie Doemel | doemel.36.johnie@example.com |
+--------+---------------+------------------------------+
1 row in set (0.001 sec)
> SELECT * FROM `address_book` WHERE MATCH (`email`) AGAINST ("+johnie +doemel" IN BOOLEAN MODE);
+--------+---------------+------------------------------+
| id     | name  | email|
+--------+---------------+------------------------------+
| 222698 | Johnie Doemel | doemel.36.johnie@example.com |
+--------+---------------+------------------------------+
1 row in set (0.001 sec)

哇,真快 比沒有索引的方法快 200 倍以上。我們并不局限于像在 B 樹索引中那樣從短語的開頭進行搜索,這意味著在電子郵件中搜索也可以快速進行。我們的索引根據 過濾行EXPLAIN。

> EXPLAIN SELECT * FROM `address_book` WHERE MATCH (`name`) AGAINST ("+johnie +doemel" IN BOOLEAN MODE)\G
   id: 1
  select_type: SIMPLE
table: address_book
   partitions: NULL
 type: fulltext
possible_keys: name
  key: name
      key_len: 0
  ref: const
 rows: 1
     filtered: 100.00
Extra: Using where; Ft_hints: no_ranking

生活是美好的?;蛘呤菃幔?/p>

> SELECT * FROM `address_book` WHERE MATCH (`name`) AGAINST ("+john +doe" IN BOOLEAN MODE);
Empty set (0.002 sec)

第一個陷阱!您找不到比標記長度短的短語,默認情況下整個單詞都是標記。這是搜索速度和索引構建/存儲成本之間的平衡。

$ time cat address_book.sql | mysql
real    29m 34.44s
# du -bc /var/lib/mysql/default/fts_*
492453888       total

那是 126% 的未索引加載時間,僅全文索引占用的時間是數據本身的 7 倍。請注意,沒有簡單的方法可以從 中檢查全文索引大小INFORMATION_SCHEMA,它必須在 MySQL 服務器文件系統上完成。

用途: 當您想按整個單詞進行搜索時。布爾模式表達式允許執行一些很酷的技巧,例如排除某些單詞或按相關性查找,您可能會發現這些技巧很有用。但是您必須愿意接受更高的寫入時間和更高的存儲成本。

在 n-gram 解析器中使用反向索引

這次每個單詞將被拆分成 n-gram。n-gram 的默認長度在服務器配置變量中定義:

> show variables like "ngram_token_size";
+------------------+-------+
| Variable_name    | Value |
+------------------+-------+
| ngram_token_size | 2     |
+------------------+-------+

索引創建語法必須明確定義分詞器(此處命名為“解析器”)。

ALTER TABLE `address_book` ADD FULLTEXT (`name`) WITH PARSER ngram, ADD FULLTEXT(`email`) WITH PARSER ngram;

這次按預期找到了行,即使在搜索中沒有使用整個單詞。

> SELECT * FROM `address_book` WHERE MATCH (`name`) AGAINST ("+john +doe" IN BOOLEAN MODE);
+--------+----------------+-------------------------------+
| id     | name   | email |
+--------+----------------+-------------------------------+
| 222698 | Johnie Doemel  | doemel.36.johnie@example.com  |
| 316137 | Johnnie Doepel | johnnie-doepel-72@example.com |
+--------+----------------+-------------------------------+
2 rows in set (0.266 sec)

但是這種可怕的表現呢?這比沒有索引要慢!答案在于 n-gram 大小。如果匹配短語與 n-gram 大小不匹配,則數據庫必須查詢索引幾次并合并結果或進行補充的非索引過濾。讓我們重新啟動我們的服務器并--ngram_token_size=3重建表。

> SELECT * FROM `address_book` WHERE MATCH (`name`) AGAINST ("+john +doe" IN BOOLEAN MODE);
+--------+----------------+-------------------------------+
| id     | name   | email |
+--------+----------------+-------------------------------+
| 222698 | Johnie Doemel  | doemel.36.johnie@example.com  |
| 316137 | Johnnie Doepel | johnnie-doepel-72@example.com |
+--------+----------------+-------------------------------+
2 rows in set (0.087 sec)

因此,在這種情況下doe,匹配的標記大小和索引被直接使用,但john必須在該索引中間接找到。如果我們要求 ,這一點就更明顯了COUNT。

> SELECT COUNT(*) FROM `address_book` WHERE MATCH (`email`) AGAINST ("+john" IN BOOLEAN MODE);
+----------+
| COUNT(*) |
+----------+
|     3563 |
+----------+
1 row in set (0.064 sec)   # phrase longer than token
> SELECT COUNT(*) FROM `address_book` WHERE MATCH (`email`) AGAINST ("+doe" IN BOOLEAN MODE);
+----------+
| COUNT(*) |
+----------+
|      431 |
+----------+
1 row in set (0.003 sec)    # phrase equal to token

所以我們犧牲了使用索引按 2 個字符搜索的能力,在按 3 個字符搜索時獲得了很大的提升,在其他情況下獲得了平庸的提升。

使用這種方法是一堆權衡。不,您不能在同一字段上使用不同 n-gram 大小的索引來解決各種搜索短語長度。更糟的是——配置變量是全局的,所以你甚至不能FULLTEXT在具有不同 n-gram 大小的不同表上有兩個索引。一個配置必須滿足您在服務器范圍內的所有需求。

寫入性能和存儲損失如何?

$ time cat address_book.sql | mysql
real    26m 31.05s
# du -bc /var/lib/mysql/default/fts_*
362430464       total

不幸的是它們很大,索引占用的空間是數據的 5 倍。

使用: 當你想按部分單詞進行搜索時。布爾模式表達式也適用于此。但首先,您必須找到令牌長度在服務器范圍內的正確平衡,并接受更高的寫入時間和更高的存儲成本。長度不同于標記大小的短語仍然比未索引的方法更快,但沒有“哇”因素。

避免: 當您的文本使用表意語言(如中文或日文)并且需要單字符標記時。日語有單獨的 MeCab 分詞器,但這超出了本文的范圍。

InnoDB 反向索引性能下降

讓我們使用上一章的數據并刪除所有行。

> DELETE FROM `address_book`;
> SELECT * FROM `address_book` WHERE MATCH (`name`) AGAINST ("+john +doe" IN BOOLEAN MODE);
Empty set (0.233 sec)

那么對于有數據的表來說時間是 0.087 秒,但現在對于空表??來說是 0.233 秒?這是因為當從 InnoDB 表中刪除行時,它不會從 FULLTEXT 索引中刪除。相反,單獨的隱藏表跟蹤刪除的行,并且在過時的索引中搜索必須將 1_000_000 行的過時結果與已刪除的 1_000_000 行的列表進行比較。這變得越來越糟。讓我們添加、刪除、添加、刪除和添加我們的數據。所以我們回到表中的 1_000_000 個原始行。與我們開始時相同的行數。

> SELECT * FROM `address_book` WHERE MATCH (`name`) AGAINST ("+john +doe" IN BOOLEAN MODE);
+--------+----------------+-------------------------------+
| id     | name   | email |
+--------+----------------+-------------------------------+
| 222698 | Johnie Doemel  | doemel.36.johnie@example.com  |
| 316137 | Johnnie Doepel | johnnie-doepel-72@example.com |
+--------+----------------+-------------------------------+
2 rows in set (7.038 sec)

這種情況迅速升級……現在是時候進入非常迷幻的土地了。要重建 InnoDBFULLTEXT索引并恢復性能,您必須更改整個表。這需要大量的數據庫用戶權限,并且很可能導致應用程序停機。但不要害怕。有全局innodb_optimize_fulltext_only=ON標志,全局(?。└?code>ALTER/ OPTIMIZE(在 InnoDB 中,它們是同義詞)以僅從FULLTEXT索引中清除舊條目。您可以通過設置標志來配置清除多少令牌innodb_ft_num_word_optimize,最大值為 10_000。如果你完成了,就沒有反饋。我再重復一次——如果你完成了沒有反饋,你應該連續運行ALTERs 希望在某個時候你的FULLTEXT索引沒有過時的條目。

那是垃圾UI設計。

治療比疾病更糟糕。MyISAMFULLTEXT即時清除索引,它不會降低數據保留。因此,您可能會將 InnoDB 表轉換為 MyISAM,從而丟失所有 InnoDB 好東西?;蛘吣梢詷嫿ㄑa充 MyISAM 表,如address_book_fts,在那里有FULLTEXT索引并使用觸發器從 InnoDB 表同步數據。當您認為自己很厲害時 - GTID 一致性就會發揮作用。如果您在復制中使用 GTID 事務標識符,則無法在同一事務中更新 InnoDB 和 MyISAM 表,這意味著您必須冒在流程中自動提交寫入的風險。呸。

備選方案

我希望通過這篇文章您能更好地了解 MySQL 關于全文搜索的功能。有取舍,也有缺陷。如果您還沒有找到符合您需求的解決方案,我建議:

  • 嘗試切換到 PostgreSQL。MySQL 中的全文搜索是一些奇怪的、未完成的拼湊而成。PostgreSQL 解決方案要好得多,也許我會寫這篇文章的后續文章,但使用 Postgres。
  • 使用MySQL,但使用Sphinx插件而不是內置解決方案。
  • 使用ElasticSearch

以上就是MySql中的Full Text Search全文索引優化的詳細內容,更多關于MySql全文索引優化的資料請關注其它相關文章!

標簽: MySQL
主站蜘蛛池模板: 少妇私密会所按摩到高潮呻吟 | 91福利社区在线观看 | 成人一级黄色片 | 91久久精品一区二区三区 | 国产精品99久久久久久久女警 | 成人无码精品一区二区三区 | 国产做a爰片久久毛片a我的朋友 | 精品中文字幕一区二区三区av | 各种少妇正面着bbw撒尿视频 | 成人欧美一区二区三区黑人动态图 | 国产无套粉嫩白浆内谢在线 | 福利视频一区 | 麻豆国产av超爽剧情系列 | 国产精品乱码一区二区三区视频 | 激情网综合 | 精品人妻伦九区久久aaa片 | 色五五月 | 成人欧美一区二区三区黑人免费 | 久久99国产综合精品 | 亚洲成人基地 | 97视频在线观看播放 | 日韩av女优在线观看 | 成人性生交大片免费7 | 国产中文字幕在线视频 | 巨大欧美黑人xxxxbbbb | 亚洲视频在线观看免费视频 | 久草在线视频免费资源观看 | 欧美黄色高清视频 | 精品日本一区二区三区在线观看 | 91精品情国产情侣高潮对白文档 | 97精品人妻一区二区三区香蕉 | 久久综合香蕉国产蜜臀av | 欧洲少妇性喷潮 | 国产久草视频 | 开心激情婷婷 | 日本高清视频在线播放 | 亚洲 自拍 另类 欧美 综合 | 午夜精品欧美 | 大尺度av | 国产中文字幕在线视频 | 国产jizz| 99免费在线视频 | 国产成人无码aa片免费看 | 亚洲成熟人网站 | 奇米777四色在线精品 | 亚洲综合在线另类色区奇米 | 91久久国产涩涩涩涩涩涩 | 天天综合网天天综合色 | 国产精品免费看jizzjlzz | 人妻aⅴ无码一区二区三区 日本一卡2卡3卡四卡精品网站 | 在线看91| 欧美不卡一区二区三区 | 国产成人片| 午夜爱爱网 | 国产毛片毛片毛片毛片毛片毛片 | 91香蕉视频在线看 | 日本道中文字幕 | 午夜精品久久久久久久99热额 | 无码少妇一区二区 | 亚洲99影视一区二区三区 | 草草福利视频 | 日韩av首页 | 青青草娱乐在线 | 少妇性饥渴无码a区免费 | 国产精品一级在线 | 一级作爱视频 | jzzjzz日本丰满少妇 | 免费在线精品视频 | 久久精品国产精品亚洲艾草网 | 久久久精品中文字幕麻豆发布 | 嫩草在线视频 | 99久久精品无码一区二区三区 | 少妇性bbb搡bbb爽爽爽欧美 | 在线播放免费人成毛片乱码 | aa视频在线 | 日韩人妻熟女中文字幕a美景之屋 | 久久人人爽爽爽人久久久 | 欧美久久伊人 | 国产精品久久高潮呻吟声 | 欧美黑吊大战白妞 | 免费看黄色的视频 | 天天操夜夜躁 | 波多野结衣家庭主妇 | 亚洲免费视频一区 | 日韩一片 | 日本无遮挡边做边爱边摸 | 久久久精品人妻一区二区三区 | 日韩一区在线视频 | 玖草视频在线 | 狼人香蕉| 亚洲熟女一区二区三区 | 午夜av无码福利免费看网站 | 特黄特色大片免费播放 | 黄色大片儿 | 香蕉a视频 | 欧美视频1| 禁断一区二区三区在线 | 亚洲一区精品二人人爽久久 | 日韩一级在线观看视频 | 少妇一边呻吟一边说使劲视频 | 欧美乱妇高清无乱码 | 中国videosex高潮hd | 国产午夜精品av一区二区 | 欧美性折磨bdsm激情另类视频 | 少妇被粗大猛进进出出 | 石原莉奈一区二区三区在线观看 | 东北女人啪啪对白 | 亚洲精品喷潮一区二区三区 | 国产日韩欧美不卡 | 亚洲黄色网络 | 欧美一级二级三级视频 | 毛片一毛片二毛片三国产片 | 看毛片网| 草逼视频网站 | 一区二区播放 | 欧美日韩在线播放 | 国产精品视频一区国模私拍 | 一级国产20岁美女毛片 | 国产午夜一区 | 成人片黄网站a毛片免费 | 久久不射网站 | 国产精品美女久久久久久久久 | 国产中文字幕在线免费观看 | 国产无人区码熟妇毛片多 | 狠狠色成色综合网 | 色婷婷噜噜久久国产精品12p | 一级片免费视频 | 亚洲视频黄色 | 日本久久久久 | 成人高清视频在线观看 | 婷婷久久久亚洲欧洲日产国码av | 午夜时刻免费入口 | 欧美日韩在线免费观看视频 | 婷婷开心深爱五月天播播 | 午夜家庭影院 | 久久久久久久久久久网站 | 久久99精品久久久久子伦 | 91小宝寻花一区二区三区 | 午夜啪啪福利视频 | 日本全棵写真视频在线观看 | 亚洲欧美性受久久久999 | 亚洲自拍偷拍综合 | 一本一道久久久a久久久精品蜜臀 | 黄色高清片| 中文字幕乱码无码人妻系列蜜桃 | 精品一区二区在线观看视频 | 亚洲日本va午夜中文字幕一区 | 18禁黄网站禁片免费观看女女 | 久久久久中文字幕亚洲精品 | 日韩精品影片 | 永久免费精品视频网站 | 欧美色性视频 | 天天爽天天爽天天爽 | 91丨porny丨在线 | 欧美丰满少妇 | 四虎8848精品成人免费网站 | 国产夫妻在线观看 | 三级三级18女男 | 国产乱色国产精品播放视频 | 免费asmr色诱娇喘呻吟外国 | 亚洲精品久久久久久动漫器材一区 | 成人综合一区 | 成 人 黄 色 片 在线播放 | 曰韩毛片 | 国语自产少妇精品视频 | 免费涩涩18网站入口 | 91插插影院 | 国产裸体美女视频全黄 | 欧美性猛交xxxx免费视频软件 | 色噜噜狠狠色综合久 | 欧美日韩亚洲成人 | 男人av的天堂 | 真实的国产乱xxxx在线91 | av首页在线观看 | 成人毛片av | 久久久久久久久淑女av国产精品 | 污网站在线看 | www在线观看av | 在线亚洲不卡 | 亚洲欧美在线一区 | 鲁夜天天末成午 | 欧美大片aaaaa免费观看 | 在线播放av网址 | 一级片久久久 | 色偷偷亚洲男人本色 | 福利一区二区三区视频在线观看 | 中文字幕在线无码一区二区三区 | 狠狠干少妇 | 玖玖爱这里只有精品 | 成人国产精品秘片多多 | 成人春色www在线 | 99国产精品久久久久久久成人热 | 久久久久久久av麻豆果冻 | 久久综合精品国产二区无码 | 成人午夜免费视频 | 天天插天天操天天干 | 亚洲精品免费在线视频 | 日本免费黄色网址 | 九色porny自拍视频在线播放 | 亚洲免费观看高清完整 | 欧美日本在线观看 | 久久久久久免费毛片精品 | 亚洲嫩 | 99热日韩 | 欧州一区二区三区 | 欧美aⅴ在线观看 | 99视频偷窥在线精品国自产拍 | 一级淫片在线观看 | 日本少妇一级片 | 51自拍视频在线观看 | 少妇在线观看 | 久久精品79国产精品 | 国产人妻鲁鲁一区二区 | 日韩成人av在线播放 | 久久久午夜视频 | 青草国产精品久久久久久 | 久久久福利视频 | 欧美大片免费观看 | 极品美妇后花庭翘臀娇吟小说 | 奇米国产| 高清视频一区二区 | 欧美午夜精品一区二区蜜桃 | 青青在线 | 中文字幕乱码在线蜜乳欧美字幕 | 男女视频国产 | 国产综合日韩 | jiz亚洲| 极品美女无套呻吟啪啪 | av亚洲产国偷v产偷v自拍软件 | 欧美激情videos | 成年人黄色免费网站 | 污污视频在线观看网站 | 国内极品少妇1000激情啪啪千 | 精品国产乱码久久久久夜 | 日本精品啪啪一区二区三区 | 99re在线视频精品 | 久久女性裸体无遮挡啪啪 | 国产日韩视频在线观看 | 无码av波多野结衣久久 | 精品国产乱码 | 奇米四色影视 | 国产三级小视频 | 日韩a在线播放 | 曰本女人牲交全视频播放 | 国产91打白嫩光屁屁网站 | 丁香六月av| 精品夜夜嗨av一区二区三区 | 国产av一区二区三区天堂综合网 | 最新亚洲春色av无码专区 | 欧美一二三区在线观看 | 国产情侣一区二区 | 欧美数码高清视频 | 亚洲中文精品久久久久久不卡 | 啪啪国产精品 | 久久蜜桃精品一区二区三区综合网 | 欧洲一二三区 | 国产色秀视频 | 天天干干干干干 | 国产91精品一区二区绿帽 | 国产精品粉嫩jk国产呦系列 | 一区二区三区内射美女毛片 | 国产精品免费麻豆入口 | 麻豆传媒网站在线观看 | 一起操网站 | 午夜大片 | 亚洲乱亚洲乱妇无码 | 欧美日韩亚洲一区二区 | 在线免费观看视频你懂的 | 中文字幕亚洲精品 | 40岁干柴烈火少妇高潮不断 | 性a视频| 中文字幕高清免费日韩视频在线 | 夜鲁鲁鲁夜夜综合视频欧美 | 国精产品一区一区三区视频 | 色悠悠视频 | 精品毛片乱码1区2区3区 | 青青草福利 | 色哟哟在线视频 | 99久久99久久精品免费看蜜桃 | 天天av天天翘天天综合网 | 国产影片中文字幕 | 黑人精品一区二区三区 | 亚洲国产精品国自产拍av秋霞 | 97人人做人人添人人爱 | 国产香蕉尹人视频在线 | 国产精品一区二区三区在线看 | 亚洲午夜精品毛片成人播放器 | 欧美一级黄色片 | 久久成人久久 | 国产精品偷伦费观看一次 | 日本亚洲一区二区 | 亚洲精品毛片一级91精品 | 黄色片一级毛片 | 李丽珍a级裸体啪啪 | 亚洲娇小与黑人巨大交 | 自拍偷拍21p | 久久久一本精品99久久精品66 | 三攻一受h啪肉np文 三级av毛片 | 黄色视屏网站 | 日本久久久久久久做爰片日本 | 麻豆av一区二区三区久久 | 日本不卡一区二区三区 | 蜜臀av免费一区二区三区 | 亚洲精品国产精品乱码不99 | 国产盗摄精品一区二区酒店 | bt天堂新版中文在线地址 | 国产人妻精品久久久久野外 | 欧美乱人免费视频观看 | www.com毛片 | 国产一区二区三区自拍 | 亚洲一二三区视频 | 国内毛片毛片毛片毛片毛片 | 狠狠色丁香婷婷综合视频 | 欧美亚洲免费 | www成人网| 欧美日韩国产成人高清视频 | 高h纯肉无码视频在线观看 亚洲国产成人av毛片大全 | 国产精品毛片久久久久久 | 欧美粗大猛烈老熟妇 | 国产诱惑av | 久久久久久欧美精品se一二三四 | 婷婷午夜天 | 日日爱影视| 女人浣肠av大片 | 麻豆专区一区二区三区四区五区 | jizz日本免费| 男女精品久久 | www国产黄色 | 国产午夜精品一区二区三区在线观看 | 亚洲国产视频一区 | 特黄做受又粗又大又硬老头 | 一级大片在线观看 | 精品久久久久久无码中文字幕 | 人人九九精 | 69视频在线观看 | 女同一区二区 | 国产真实伦视频 | 国产美女一区二区三区 | 国产综合无码一区二区色蜜蜜 | 疯狂撞击丝袜人妻 | 国产精品久久久久久久久久10秀 | 久久一区欧美 | 色婷婷一区二区三区四区成人网 | 国产女人第一次做爰视频 | 久久精品99国产精 | 日韩av福利在线观看 | av免费观看不卡 | 国内揄拍国内精品 | 午夜精品久久久久久久久久蜜桃 | 日本高清视频一区 | 美女无遮挡免费视频网站 | 波多野吉衣在线观看视频 | 韩国明星乱淫(高h)小说 | 91视频久久久久久 | 久操视频在线观看免费 | 免费一级特黄特色毛片久久看 | 国产伦精品一区二区三区免.费 | 91华人在线| 97视频网站 | 亚洲国产三级在线观看 | 少妇二级淫片免费放 | 亚洲欧洲巨乳清纯 | 三级不卡 | av一区二| av网站免费看 | 亚洲精品图片一区15p | 欧美偷窥清纯综合图区 | 噜啦噜色姑娘综合 | 免费一级毛片在线观看 | 在线观看免费成人 | 91制片国产 | 中日韩在线视频 | www在线看片 | 国产一区不卡视频 | 自拍偷拍国产精品 | 丰满人妻翻云覆雨呻吟视频 | 久久日本精品字幕区二区 | 夜夜骑狠狠干 | 亚洲欧洲美洲在线观看 | 亚洲av禁18成人毛片一级在线 | 日本另类αv欧美另类aⅴ | 色人阁视频| 国产乱国产乱 | 亚洲精品一区av在线播放 | 囯产精品久久久久久久久久妞妞 | 97久久超碰精品视觉盛宴 | 久久久久久久国产免费看 | 成人性生交大片免费看视频hd | 亚洲精品高清在线观看 | 亚洲综合欧美综合 | 波霸ol色综合久久 | 国产精品国产三级国产普通话99 | 东京热一区二区三区无码视频 | 五十路丰满中年熟女中出 | 51精品视频在线视频观看 | 久久精品高清一区二区三区 | 在线看片人成视频免费无遮挡 | 国产二区自拍 | 窝窝午夜看片 | 少妇裸交aa大片 | 国产一精品一av一免费爽爽 | 亚洲第一精品在线观看 | 亚洲一区 视频 | 床戏做爰无遮挡摸亲胸小说 | 在线看片无码永久免费视频 | 日本熟妇毛茸茸丰满 | 日日碰狠狠躁久久躁综合网 | 69成人网| 亚洲欧美国产另类 | 国产一区二 | 性高湖久久久久久久久 | 一色桃子在线精品播放 | 久久99热狠狠色一区二区 | 夜夜爽免费888视频 成 人 黄 色 网 页 | 日日草天天干 | 日本不卡免费在线 | 原创少妇半推半就88av | 欧美午夜一区二区三区 | 亚洲国产一二三 | 欧美熟妇毛茸茸 | 亚洲乱码国产乱码精品精剪 | 午夜av大片 | 国产精品另类激情久久久免费 | 欧美 日本 国产 | 国产一级片精品 | 又白又嫩毛又多15p 国产热の有码热の无码视频 | 久久久精品人妻一区二区三区 | 亚洲精品久久久蜜臀 | 一区二区午夜 | 狂野欧美性猛交xxxxhd | 国产成人精品a视频一区www | 亚洲黄色成人网 | 手机在线永久免费观看av片 | 亚洲天堂第一 | 国产精品7777cos | 污视频免费在线观看 | 3d动漫精品啪啪一区二区免费 | 网站毛片 | 丰满少妇人妻久久久久久 | 无码无遮挡又大又爽又黄的视频 | 欧美日韩精品一区二区三区在线 | 日韩欧美久久精品 | 色屁屁www | 中国美女乱淫免费看视频 | 久久丫精品国产 | 亚洲美女操 | 亚洲国产精品一区二区久久恐怖片 | 亚洲成人黄色网址 | 亚洲中文字幕无码一区在线 | 国产av新搬来的白领女邻居 | 成人免费在线视频网站 | 国产精品色 | 五月天激情丁香 | 免费av资源| 91久久精 | 久久久人成影片一区二区三区 | 午夜三级a三级三点窝 | 非洲黑妞xxxxhd精品 | 91麻豆精品国产91久久久更新时间 | 国产69精品久久久久99 | 欧美又粗又大aaa片 熟女少妇内射日韩亚洲 | 亚洲第一av| 无码人妻一区二区三区在线 | 国产一区二区不卡在线 | 国产亚洲精品a在线 | 天堂在线资源网 | blacked精品一区国产在线观看 | 在线aⅴ亚洲中文字幕 | 天天操天天爽天天射 | 国产精品高潮呻吟久久av黑人 | 一区二区三区免费观看 | 婷婷丁香激情五月 | 久久99免费| 成人在线观看国产 | 天天射天天射 | 国产成人精品一区二区三区四区 | 亚洲欧美www | 国产精品无码人妻一区二区在线 | 五月天中文字幕mv在线 | 手机成人av在线 | 欧美69久成人做爰视频 | 这里只有精品视频在线 | 亚洲精品免费在线观看 | 97久久精品无码一区二区 | 国产山村乱淫老妇女视频 | 啪啪小视频网站 | 日本中文字幕在线不卡 | 中文字幕一区二区三区四区五区 | 欧美韩一区二区 | 欧美日韩偷拍视频 | 国产黄色一区二区 | 久久亚洲sm情趣捆绑调教 | 国产成人无码av | 欧美黑人xxxⅹ高潮交 | av.www| 狠狠色先锋资源网 | 国色天香社区在线视频 | 东京亚洲区卡不 | 国产成人精品日本亚洲直播 | 中文字幕在线字幕中文 | 日本午夜在线 | 杨思敏全身裸体毛片看 | 亚洲高清无专砖区 | 午夜免费看片 | 国产精品婷婷久久久久久 | 久久麻豆视频 | 在线不卡aⅴ片免费观看 | 成人国产精品入麻豆 | 国产色婷婷精品综合在线手机播放 | 中文一级片 | 污污网站在线观看视频 | 同性男男黄g片免费网站 | 奶大交一乱一乱一视一频 | 精品日本一区二区三区在线观看 | 日韩在线播放视频 | 欧洲美女x8x8免费视频 | 国产又嫩又黄又猛视频在线观看 | 无套内射视频囯产 | 久久男女视频 | 亚洲精品乱码久久久久久v 精品国产a∨无码一区二区三区 | 国产一区精品在线观看 | 日本一本一道 | 久久久久久国产精品视频 | 久久撸视频| 国产大屁股视频免费区 | 波多野结衣一区二区三区av免费 | 国产91在线 | 亚洲 | 天干天干天啪啪夜爽爽av小说 | 日本大尺度吃奶做爰久久久绯色 | 综合久久激情 | 91日韩在线视频 | 亚洲国产婷婷综合在线精品 | 无码人妻精一区二区三区 | 欧美xxxx非洲 | 亚洲日夜噜噜 | 9999人体做爰大胆视频摄影 | 精品亚洲成a人无码成a在线观看 | 亚洲国产精华液网站w | 日日操日日干 | 久久91精品国产 | 99久久精品国产毛片 | 久久久精品99 | 国产成人精品一区二区三区四区 | 久久精品99国产国产精 | 野草社区在线观看 | 欧洲成人一区二区三区 | 国产一级免费片 | 精品一区二区三区国产 | 国产iv一区二区三区 | 96人xxxxxxxxx69 | 欧美成人精品一区二区三区在线观看 | 婷婷成人综合激情在线视频播放 | 乱大交做爰xxxⅹ性 乱荡少妇xxhd | 黄色正能量网站 | 婷婷久久av | 成人男女做爰免费视频网老司机 | 亚洲综合天堂一区二区三区 | 久久久无码精品国产一区 | 黄色一节片 | 欧美日韩精品 | 久久久久久久久亚洲 | 99国产精品丝袜久久久久久 | 三浦惠理子aⅴ一二三区 | www.白浆| 欧美精品国产综合久久 | 一区二区三区日韩视频 | 久久久久久久艹 | 中文字幕一区二区三区视频 | 成人综合站 | 夜夜躁狠狠躁日日躁 | 国产偷人妻精品一区 | 波多野结衣50连登视频 | 欧美、另类亚洲日本一区二区 | 少妇av一区二区三区无码 | 欧美激情精品久久久久久蜜臀 | av男人在线 | 欧美一区二区三区爽爽爽 | 五月婷婷狠狠爱 | 人人爽人人香蕉 | 三个男吃我奶头一边一个视频 | 波多野成人无码精品电影 | 欧美一区二区三区成人久久片 | www,av在线| 国产色xx群视频射精 | 成人免费毛片嘿嘿连载视频 | 射进来av影视网 | 好大好湿好硬顶到了好爽视频 | 各种少妇正面着bbw撒尿视频 | 香蕉国产片一级一级一级一级 | 国产做受视频 | 国产吃瓜黑料一区二区 | 日产精品久久久一区二区 | 91久久国产涩涩涩涩涩涩 | 亚洲1区在线观看 | 青青青国产 | 夜夜天天拍拍 | 破处视频在线观看 | 精品国产_亚洲人成在线 | 国产av新搬来的白领女邻居 | 超碰在线公开 | 亚洲精品.www | 国产农村乱对白刺激视频 | 成人久久久久久久 | 国产一级性生活视频 | 在线一区二区三区在线一区 | 国产网红福利视频一区二区 | 青青草成人影视 | 国产在线精品一区二区在线看 | 亚洲日韩精品一区二区三区 | 亚洲成av人片一区二区密柚 | 这里只有精品久久 | 欧美三级韩国三级日本三斤 | 中国少妇裸体aaa | 好吊色国产欧美日韩免费观看 | 日本高清免费在线 |