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

我們一起聊聊 MySQL8.0 優化器

數據庫 MySQL
當我們將查詢提交給MySQL執行時,大多數的查詢都不像 select * from single_table;那樣簡單,從單個表讀取所有數據就行了,不需要用到高級的檢索方式來返回數據。大多數查詢都比較復雜,有些更復雜并且完全按照編寫的方式執行查詢絕不是獲得結果的最有效方式。

前言

線上,遇到一些sql性能問題,需要手術刀級別的調優。optimizer_trace是一個極好的工具,已經有很多資料介紹optimizer_trace怎么使用與閱讀。有必要再介紹一下我們平時不太能注意到,但是又對sql性能起著絕對作用的優化器。

優化器是啥?在sql整個生命周期里處于什么樣的位置,起到什么樣的作用,cmu15445 課程(https://15445.courses.cs.cmu.edu/fall2022/notes/14-optimization.pdf)中對此有一些直觀的描述。

圖片

以上圖片有6大模塊,每一個模塊都是一個單獨的領域。以優化器為例,從1979年到現在,已經發展出來9個細分的研究領域:

  1. Planner framework
  2. Transformation
  3. Join Order Optimization
  4. Functional Dependency and Physical Properties
  5. Cost Model
  6. Statistics
  7. Query feedback loop
  8. MPP optimization
  9. BENCHMARK

接下來會選幾個領域做一些更底層的介紹,基于篇幅的限制,某些知識點,點到為止,可以作為以后工作再深入的一個入口。

要讓優化器能夠得到足夠好的plan,有幾個必要條件:

  1. 數據庫中的表設置了合適的數據類型。
  2. 數據庫中設置了合適的索引。并且索引上有正確的統計信息。
  3. 合理的數據分布。

查詢優化器的作用:

當我們將查詢提交給MySQL執行時,大多數的查詢都不像 select  *  from  single_table;那樣簡單,從單個表讀取所有數據就行了,不需要用到高級的檢索方式來返回數據。大多數查詢都比較復雜,有些更復雜并且完全按照編寫的方式執行查詢絕不是獲得結果的最有效方式。我們可以有很多的可能性來優化查詢:添加索引、聯接順序、用于執行聯接的算法、各種聯接優化以及更多。這就是優化器發揮作用的地方。

優化器的主要工作是準備查詢以執行和確定最佳查詢計劃。第一階段涉及對查詢進行轉換,目的是重寫的查詢可以以比原始查詢更低的成本執行查詢。第二階段包括計算查詢可以執行的各種方式的成本,確定并執行成本最低的計劃。

這里有一個注意的點:優化器所做的工作并不精確科學,因為數據及其分布的變化,優化器所做的工作并不精確。轉換優化器的選擇和計算的成本都是基于某種程度的估計。通常這些估計值足以得到一個好的查詢計劃,但偶爾你需要提供提示(hint)。如何配置優化器是另外一個話題。

查詢改寫(Transformations)

優化器有幾種更改查詢的改寫,在仍然返回相同結果的同時,讓查詢變為更適合MySQL。

當然,優化的前提是返回的結果符合期望,同時響應時間變短:減少了IO或者cpu時間。改寫的前提是原始查詢與重寫查詢邏輯一致,返回相同的查詢結果是至關重要的。為什么不同的寫法,可以返回相同的結果,又是一門學問:關系數據庫基于數學集理論的研究。

舉個查詢改寫簡單的例子:

SELECT *
FROM world.country
INNER JOIN world.city
ON city.CountryCode = country.Code
WHERE city.CountryCode = 'AUS'

這個查詢有兩個條件:city.CountryCode = 'AUS',city.CountryCode=country.Code。從這兩個條件可以得出country.Code='AUS'。優化器使用這些知識來直接過濾country。由于code列是country表的主鍵,這意味著優化器知道最多只有一行符合條件,并且優化器可以將country表視為常數( constant)。實際上,查詢最終是使用country表中的列值作為選擇列表中的常量(constant)執行掃描CountryCode='AUS'的city表中的行。

改寫如下:

SELECT 'AUS' AS `Code`,
'Australia' AS `Name`,
'Oceania' AS `Continent`,
'Australia and New Zealand' AS `Region`,
7741220.00 AS `SurfaceArea`,
1901 AS `IndepYear`,
18886000 AS `Population`,
79.8 AS `LifeExpectancy`,
351182.00 AS `GNP`,
392911.00 AS `GNPOld`,
'Australia' AS `LocalName`,
'Constitutional Monarchy, Federation' AS `GovernmentForm`,
'Elisabeth II' AS `HeadOfState`,
135 AS `Capital`,
'AU' AS `Code2`,
city.*
FROM world.city
WHERE CountryCode = 'AUS';

從性能的角度來看,這是一個安全的轉變,且是優化器可以自動實現的,并且對外提供了一個開關。

某些轉換會更加復雜,且并不總是提高性能。因此set optimizer_switch =on or off 是可選的,

optimizer_switch 的內容 以及 何時怎么使用 optimizer hints 會在下一篇文章中討論。

有對查詢改寫怎么實現感興趣的朋友,可以在GreatSQL社區留言,為大家準備了大概9篇論文。

基于成本優化(Cost-Based Optimization)

一旦優化器決定要進行哪些轉換,就需要確定如何執行重寫查詢。業內目前有兩條路徑來解決,rule model 和 cost model。如果您已經熟悉對optimizer_trace輸出的解讀,作為dba已經對cost model 了解的足夠多了。

我再試著從優化器的角度來解讀一下成本優化。

單表查詢

無論查詢如何,計算成本的原則都是相同的,但是,查詢越復雜,成本估算就越復雜。

舉一個簡單的例子,一個查詢單個表的sql,where條件使用二級索引列。

mysql> SHOW CREATE TABLE world.city\G
**************************** 1. row ****************************
Table: city
Create Table: CREATE TABLE `city` (
`ID` int(11) NOT NULL AUTO_INCREMENT,
`Name` char(35) NOT NULL DEFAULT ",
`CountryCode` char(3) NOT NULL DEFAULT ",
`District` char(20) NOT NULL DEFAULT ",
`Population` int(11) NOT NULL DEFAULT '0',
PRIMARY KEY (`ID`),
KEY `CountryCode` (`CountryCode`),
CONSTRAINT `city_ibfk_1` FOREIGN KEY (`CountryCode`) REFERENCES `country`
(`Code`)
) ENGINE=InnoDB AUTO_INCREMENT=4080 DEFAULT CHARSET=utf8mb4
COLLATE=utf8mb4_0900_ai_ci
1 row in set (0.0008 sec)

SELECT * FROM world.city WHERE CountryCode = 'IND'

優化器可以選擇兩種方式來獲取匹配的行。一種方法是使用CountryCode上的索引查找索引中的匹配行,然后查找請求的行值。另一種方法是進行全表掃描并檢查每一行確定它是否符合where條件。

這些訪問方法中哪一種成本最低(最快)不是可以直接確定。這取決于幾個因素:

  • 索引的選擇性:cost_單行直接獲取<cost_二級索引查詢逐漸后獲取<cost_全表掃描

索引必須顯著減少要檢查的行數。越多選擇指數,使用它相對便宜。(這里行數不太準確,應該是IO次數,以及IO的方式,順序IO 還是隨機IO)  《MySQL是怎樣運行的》有介紹一行數據是怎么讀取到的。

  • 索引覆蓋度:如果索引包含所有列查詢需要,可以跳過對實際行的讀取。
  • 讀取記錄的代價:取決于幾個因素,索引和行記錄是否都在innodb_buffer_pool中,如果不在,從磁盤讀取的代價和速度是多少。使用二級索引時,在切換讀取索引和讀取主鍵索引之間,將需要更多的隨機I/O,查找記錄需要耗費的索引尋找次數(一般索引高度來決定)變得非常重要。

MySQL8.0 的優化器可以訊問InnoDB是否查詢所需的記錄可以在緩沖池中找到,或者是否

必須從從磁盤上讀取記錄。這對執行計劃的改進,有巨大的幫助。

讀取記錄的所需cost是很復雜的問題,MySQL不知道硬件的性能,MySQL8.0 默認磁盤讀取的成本是4倍內存讀取。

mysql>   select  cost_name, default_value from  mysql.server_cost;
+------------------------------+---------------+
| cost_name | default_value |
+------------------------------+---------------+
| disk_temptable_create_cost | 20 |
| disk_temptable_row_cost | 0.5 |
| key_compare_cost | 0.05 |
| memory_temptable_create_cost | 1 |
| memory_temptable_row_cost | 0.1 |
| row_evaluate_cost | 0.1 |
+------------------------------+---------------+
6 rows in set (0.00 sec)

mysql> select engine_name,cost_name,default_value from mysql.engine_cost;
+-------------+------------------------+---------------+
| engine_name | cost_name | default_value |
+-------------+------------------------+---------------+
| default | io_block_read_cost | 1 |
| default | memory_block_read_cost | 0.25 |
+-------------+------------------------+---------------+
2 rows in set (0.00 sec)

表關聯順序(Table Join Order)

多表關聯時,outer and straight joins,join 順序是固定的。inner join時,優化器會自由選擇join順序,為每一種組合計算代價。計算復雜度和表數量的關系:

N張表,需要做N! 的計算。5張表,組合度為5!=5*4*3*2*1=120

MySQL支持連接多達61個表,在這種情況下可能有61!計算成本的組合。計算組合的成本過高且可能需要更長時間而不是執行查詢本身。因此,優化器默認情況下會刪除基于成本的部分評估查詢計劃,因此只有最有希望的計劃會被完全評估。

在給定的表之后,還可以通過參數optimizer_prune_level和optimizer_search_depth 配置搜索裁剪、搜索深度,來停止評估。比如10張表關聯,理論上需要評估10!=3628800次,默認最多62次。

最佳聯接順序 有兩個個因素影響,表自身的大小,經過過濾器后每個表減少的行數。

默認過濾效果(Default Filtering Effects)

多表關聯時,知道每張表有多少行數據參與join,很有意義。

當使用索引時,當過濾器與其他表不相關時,優化器可以非常準確地估計與索引匹配的行數。如果沒有索引,直方圖統計可用于獲得良好的濾波估計。當沒有過濾列的統計信息時,就會出現困難。在這種情況下,優化器會后退基于內置默認估計。

那到底是怎么估算的呢?詳見以下這篇大名鼎鼎的論文:

《Access Path Selection in a Relational Database Management System》(https://dl.acm.org/doi/pdf/10.1145/582095.582099)

需要中文版的朋友可以留言到GreatSQL社區。

System R針對join ordering問題,開創性的使用基于動態規劃的方法,結合Interesting Order形成等價類的方式,來對search space進行高效搜索。不僅如此,其對于selectivity的計算,cost的計算方式,影響非常深遠,相信早期的商業數據庫大多采用類似的代價估算方式(MySQL直至今日仍然如此)。

論文太深奧了 ,來點大家看得懂的

圖片

這個列表并不詳盡,但它應該能讓您很好地了解MySQL是如何實現過濾估計的。默認過濾效果顯然不是非常準確,特別是對于大表,因為數據不遵循這樣的嚴格規則。這就是為什么索引和直方圖對于獲得良好的查詢計劃非常重要。在確定查詢計劃的最后,會對單個部分和整個查詢進行成本估算。這些信息有助于了解優化器到達查詢執行計劃。

(這里也可以看出MySQL的優化器的參考值相對Oracle是比較簡單的,導致的結果就是MySQL解析sql很快,快到幾乎不用緩存執行計劃,Oracle為了解決生成計劃慢的問題, 引入了軟簡析,軟軟簡析,綁定執行計劃等方案,當然MySQL的優化器短板也很明顯,為DBA們制造了大量sql優化的需求)

查詢成本(The Query Cost)

有5種方式查看optimizer 估算出來的成本。每一種都值得獨立開篇來討論,每一種都有它使用的場景,(生產上做操作有絕對的安全保障嗎?)。

1、explain(explain 后面的sql,真的不會執行 or 產生cost嗎?如果會,什么場景會觸發cost)

2、explain format= tree (8.0.16)  or  explain format= json

3、explain analyze(8.0.18) 在format= tree的基礎上,增加了多種信息( actual cost  怎么定義 的?actual cost又是一個量化分析的話題,它是一個絕對的概念還是一個相對 explain的概念),執行成本、返回行數、執行時間、循環次數等,本質上,EXPLAIN ANALYZE只適用于顯式查詢,因為它需要從頭到尾監視查詢。另一方面,簡單的EXPLAIN語句也可以用于正在進行的查詢。詳見語法:(https://dev.mysql.com/doc/refman/8.0/en/explain.html#explain-analyze)

mysql> explain format=tree SELECT * FROM t1 WHERE t1.a IN (SELECT t2.b FROM t2 WHERE id < 10);
*************************** 1. row ***************************
-> Nested loop inner join (cost=4.95 rows=9)
-> Filter: (`<subquery2>`.b is not null) (cost=2.83..1.80 rows=9)
-> Table scan on <subquery2> (cost=0.29..2.61 rows=9)
-> Materialize with deduplication (cost=3.25..5.58 rows=9)
-> Filter: (t2.b is not null) (cost=2.06 rows=9)
-> Filter: (t2.id < 10) (cost=2.06 rows=9)
-> Index range scan on t2 using PRIMARY (cost=2.06 rows=9)
-> Index lookup on t1 using a (a=`<subquery2>`.b) (cost=2.35 rows=1)
1 row in set (0.01 sec)

mysql> explain analyze SELECT * FROM t1 WHERE t1.a IN (SELECT t2.b FROM t2 WHERE id < 10)\G
*************************** 1. row ***************************
-> Nested loop inner join (cost=4.95 rows=9) (actual time=0.153..0.200 rows=9 loops=1)
-> Filter: (`<subquery2>`.b is not null) (cost=2.83..1.80 rows=9) (actual time=0.097..0.100 rows=9 loops=1)
-> Table scan on <subquery2> (cost=0.29..2.61 rows=9) (actual time=0.001..0.002 rows=9 loops=1)
-> Materialize with deduplication (cost=3.25..5.58 rows=9) (actual time=0.090..0.092 rows=9 loops=1)
-> Filter: (t2.b is not null) (cost=2.06 rows=9) (actual time=0.037..0.042 rows=9 loops=1)
-> Filter: (t2.id < 10) (cost=2.06 rows=9) (actual time=0.036..0.040 rows=9 loops=1)
-> Index range scan on t2 using PRIMARY (cost=2.06 rows=9) (actual time=0.035..0.038 rows=9 loops=1)
-> Index lookup on t1 using a (a=`<subquery2>`.b) (cost=2.35 rows=1) (actual time=0.010..0.010 rows=1 loops=9)
1 row in set (0.01 sec)

explain format= json  怎么算 參考 format= json 怎么算

explain analyze 怎么讀?參考 

(https://www.mmzsblog.cn/articles/2022/05/07/1651914715938.html)

4、MySQL Workbench  Visual Explain diagram  大部分的mysql客戶端都提供可視化的執行計劃功能。

SELECT ci.ID, 
ci.Name,
ci.District,
co.Name AS Country,
ci.Population
FROM world.city ci
INNER JOIN (SELECT Code,
Name
FROM world.country
WHERE Continent = 'Europe'
ORDER BY SurfaceArea LIMIT 10 ) co
ON co.Code = ci.CountryCode
ORDER BY ci.Population DESC
LIMIT 5

可視化執行計劃展示:

圖片

12種數據表訪問方式作色

圖片

作色與表訪問方式成本大小的關系。

圖片

Blue (1) is the cheapest; green (2), yellow (3), and orange (4) represent low to  medium costs; and the most expensive access types and operations are red symbolizing  a high (5) to very high (6) cost.

以上都只是一個平均值or 經驗值,可視化執行計劃的顏色展示不是絕對的真理。

可以思考一下:索引look up 一定比全表掃描好嗎?索引只會帶來查詢上的正向優化嗎?

5、終極武器 optimizer trace

影響以上輸出的因素有:(不好意思,以下每種,又是一個開篇話題 :) 我真是太討厭了。。。)

1、sql_mode

2、optimizer switch

3、index statistics

4、mysql.engine_ cost and mysql.server_cost tables

done,待續

責任編輯:武曉燕 來源: GreatSQL社區
相關推薦

2025-06-11 02:10:00

2024-07-11 08:26:00

2023-07-14 12:28:07

JVM優化操作

2023-06-30 08:18:51

敏捷開發模式

2023-08-10 08:28:46

網絡編程通信

2023-08-04 08:20:56

DockerfileDocker工具

2022-05-24 08:21:16

數據安全API

2023-09-10 21:42:31

2024-02-20 21:34:16

循環GolangGo

2021-08-27 07:06:10

IOJava抽象

2023-06-09 08:06:14

操作系統調度器LLM

2022-11-03 07:51:54

運維體系監控

2025-03-13 05:00:00

2024-07-26 09:47:28

2022-10-08 00:00:05

SQL機制結構

2022-02-23 08:41:58

NATIPv4IPv6

2022-09-22 08:06:29

計算機平板微信

2024-11-28 09:57:50

C#事件發布器

2023-07-24 09:41:08

自動駕駛技術交通

2023-03-26 23:47:32

Go內存模型
點贊
收藏

51CTO技術棧公眾號

欧美精品乱码久久久久久按摩| aa级大片欧美| 久热99视频在线观看| 久草免费资源站| 中文字幕在线官网| 国产精品高清亚洲| 激情一区二区三区| 亚洲图片在线播放| 尤物在线精品| 中文字幕免费精品一区| 一级全黄裸体片| 午夜精品成人av| 亚洲精品乱码久久久久久久久| 国产一区自拍视频| 亚洲一区中文字幕在线| 99国产成+人+综合+亚洲欧美| 伊人青青综合网站| 亚洲欧美日韩偷拍| 中文成人激情娱乐网| 狠狠干狠狠久久| 五月天av影院| 精品视频二区| 国产成人精品一区二区三区网站观看| 国产成人涩涩涩视频在线观看 | 琪琪亚洲精品午夜在线| 中文字幕在线观看2018| 久操精品在线| 亚洲精品一区二区三区福利| 中文字幕第100页| 黄色在线网站噜噜噜| 亚洲欧美一区二区视频| 欧洲一区二区日韩在线视频观看免费 | 国产精品亚洲综合久久| 久久久久久国产精品久久| 日本不卡一区视频| 精品视频免费| 亚洲日本中文字幕| 极品粉嫩小仙女高潮喷水久久 | 免费在线观看一级片| 日本一区二区免费高清| 亚洲欧美日韩精品久久亚洲区| 免费啪视频在线观看| 国产一区二区久久久久| 欧美精品777| 91精品无人成人www| 欧洲亚洲两性| 色婷婷久久一区二区三区麻豆| 九色自拍视频在线观看| av影院在线免费观看| 亚洲午夜激情网页| 欧美大黑帍在线播放| 青春草在线免费视频| 洋洋av久久久久久久一区| 亚洲啊啊啊啊啊| av片在线观看免费| 一区二区三区在线免费播放| a级网站在线观看| 中文字幕中文字幕在线中高清免费版| 亚洲日本在线看| 免费看av软件| 99自拍视频在线观看| 亚洲男人的天堂av| 国产在线视频综合| www.九色在线| 日本韩国一区二区| 人人干人人干人人| 99精品女人在线观看免费视频| 欧美福利视频一区| 男插女视频网站| 成人看片黄a免费看视频| 亚洲成人精品久久| 少妇精品一区二区三区| 激情综合网站| 国产一区二区三区在线观看免费视频| 国产女主播在线一区二区| 欧美国产综合视频| 国产福利在线观看| 国产精品久久久久久亚洲毛片| 一区二区三区av| 性欧美高清come| 午夜国产不卡在线观看视频| 国产成人久久婷婷精品流白浆| 日韩成人影音| 在线不卡中文字幕播放| 中文写幕一区二区三区免费观成熟| 77成人影视| 亚洲欧美在线第一页| 亚洲精品电影院| 在线观看一区| 国产精品色婷婷视频| av在线免费在线观看| 99国产精品久久久久久久久久 | 国产三级在线免费观看| 中文字幕亚洲视频| 黄色三级中文字幕| 午夜激情成人网| 日韩一区二区三区视频| 国产熟妇久久777777| 亚洲a在线视频| 91高清免费视频| 一本一道精品欧美中文字幕| 国产99久久精品| 午夜精品一区二区在线观看的| 日本小视频在线免费观看| 色综合久久综合中文综合网| 久久艹这里只有精品| 婷婷亚洲成人| 欧美老少做受xxxx高潮| 国产性生活视频| 国产盗摄女厕一区二区三区| 日本不卡在线观看| 欧洲精品二区| 欧美中文字幕一二三区视频| 特级特黄刘亦菲aaa级| 欧美久久精品一级c片| 久久久天堂国产精品女人| 中文字幕欧美人妻精品| 99国内精品久久| 东北少妇不带套对白| 91视频亚洲| 亚洲最新视频在线| 国产成人在线观看网站| 国产精品99久久久久| 亚洲国产另类久久久精品极度| а√天堂中文在线资源8| 在线播放中文一区| 一二三四国产精品| 久久精品三级| 久久精品日韩| 国产精品一区二区日韩| 日韩视频一区二区三区| 超碰人人人人人人人| 久久综合影视| 久久精品一二三区| 捆绑调教日本一区二区三区| 欧美刺激午夜性久久久久久久| 久久国产高清视频| 免费国产亚洲视频| 水蜜桃一区二区三区| 日本久久免费| 亚洲精品国产精品国产自| 国产性70yerg老太| 粉嫩av亚洲一区二区图片| 国产在线观看欧美| 无码国模国产在线观看| 麻豆国产精品va在线观看不卡 | 国产亚洲欧美精品久久久www | 美女av在线播放| 欧美无砖专区一中文字| 少妇无套高潮一二三区| 首页国产欧美日韩丝袜| 欧美日韩一区在线播放| 欧美成人ⅴideosxxxxx| 亚洲欧洲午夜一线一品| 一级片免费在线播放| 久久嫩草精品久久久久| 欧美成人免费高清视频| 精品日韩在线| 91精品视频在线播放| av在线app| 亚洲成人在线视频播放| 久久免费视频播放| 99精品视频一区二区三区| 老太脱裤子让老头玩xxxxx| 美女视频亚洲色图| 欧美一区二区.| 国产h视频在线观看| 欧美日韩和欧美的一区二区| 日韩在线观看免| 国产成人在线视频网址| av免费观看国产| 欧美精品第一区| 成人黄色生活片| 91高清在线观看视频| 精品国精品国产| 毛片在线免费视频| 91美女福利视频| 天天干天天操天天做| 欧美~级网站不卡| 国产一区二区久久久| 亚洲欧美se| 久久精品国产视频| 特黄视频在线观看| 在线观看不卡视频| 男人的天堂久久久| 91视频在线观看免费| 亚洲激情在线看| 亚洲激情亚洲| 亚洲高清在线观看一区| 一区中文字幕| 国产精品久久久久av| 最新黄网在线观看| 亚洲人高潮女人毛茸茸| 精品国产亚洲av麻豆| 日韩欧美一区二区三区久久| www欧美com| www激情久久| 青娱乐国产精品视频| 久久三级视频| 国产精品久久久久久久乖乖| av在线不卡顿| 精品视频在线观看| 亚洲精品tv| 国产精品pans私拍| www中文字幕在线观看| 日韩视频永久免费观看| 欧美黄色小说| 亚洲国产精品女人久久久| 亚洲自拍偷拍另类| 在线观看日韩电影| 欧美一级视频免费观看| 亚洲精品欧美综合四区| 夫妇露脸对白88av| 久久久精品综合| 中文字幕一区三区久久女搜查官| 国产麻豆一精品一av一免费| 国产福利一区视频| 亚洲在线免费| 大伊香蕉精品视频在线| 亚洲五月综合| 亚洲欧洲精品在线| 精品一区不卡| 欧洲精品久久| 欧美精美视频| 欧美深深色噜噜狠狠yyy| 全球av集中精品导航福利| dy888夜精品国产专区| 国产区一区二| 成人做爰www免费看视频网站| 国产成人精选| 国产精品欧美激情在线播放| 欧美日韩视频免费观看| 日韩免费在线视频| 日韩激情电影免费看| 久久人91精品久久久久久不卡| 污污在线观看| 九九久久综合网站| 天堂av中文在线| 欧美大片第1页| 色婷婷视频在线观看| 色综合色综合网色综合| 3d玉蒲团在线观看| 欧美成人精品在线观看| 中文字幕中文字幕在线十八区| 久久久精品久久| av在线app| 久久久久久91香蕉国产| 91美女主播在线视频| 午夜精品久久久久久久男人的天堂 | 深夜福利视频在线免费观看| 亚洲激情电影中文字幕| 午夜小视频免费| 亚洲毛片在线观看.| 四虎精品在线| 亚洲人精品午夜在线观看| jizz在线观看中文| 久久伊人精品视频| xxxx成人| 国产精品成人aaaaa网站| 国产精品一区二区免费福利视频| 国产拍精品一二三| 精品国产鲁一鲁****| 国产精品免费一区二区| 日韩精品丝袜美腿| 日韩欧美精品一区二区| 久久久9色精品国产一区二区三区| 天天做天天爱天天高潮| 欧美视频成人| 国产精品-区区久久久狼| 毛片av中文字幕一区二区| 日本55丰满熟妇厨房伦| 99久久久久免费精品国产| 亚洲一二三四视频| 一区二区视频免费在线观看| 亚洲激情视频一区| 在线视频一区二区三| 国产精品主播一区二区| 欧美精品一区二区精品网| 黄色小视频在线免费观看| 久久色在线播放| 国产v日韩v欧美v| 国产精品视频免费观看www| 久久久久毛片免费观看| 久久久一本精品99久久精品| 日韩av免费大片| 日本人体一区二区| 免费成人av在线| 91人人澡人人爽| 欧美激情一区二区| 欧美成人免费观看视频| 91久久免费观看| xxxx国产精品| 国产一区二区三区在线播放免费观看 | 99久久99久久久精品齐齐| 精品熟妇无码av免费久久| 亚洲综合区在线| 91porny九色| 精品国产亚洲一区二区三区在线观看 | 精品美女一区| 国产亚洲精品久久飘花| 91欧美在线| 黄色片久久久久| 国产激情视频一区二区三区欧美 | 日韩欧美在线视频日韩欧美在线视频 | 国产一区二区三区黄视频 | 精品高清久久| 97超碰在线人人| 国产自产高清不卡| 国产免费看av| 亚洲成人精品影院| 国产乱淫片视频| 国产亚洲精品日韩| 阿v视频在线| 97人人模人人爽人人少妇| 精品日产免费二区日产免费二区| aa视频在线播放| 国产老肥熟一区二区三区| 国产又黄又粗视频| 狠狠色狠狠色综合日日五| 亚洲av无码乱码国产麻豆| 色系列之999| 一区二区三区四区日本视频| http;//www.99re视频| 五月综合激情| 天天插天天操天天射| 久久免费精品国产久精品久久久久| 精品无码久久久久久久| 欧美一区二区免费视频| 天堂中文а√在线| 国产精品久久二区| 免费一区二区三区视频导航| 欧美 日韩 激情| www.久久久久久久久| 久久久久免费看| 日韩欧美亚洲国产另类| 99自拍视频在线观看| 亚洲综合中文字幕在线观看| 99视频精品全部免费在线视频| 一区二区三区入口| 欧美高清在线一区二区| 波多野结衣一二区| 国产亚洲欧美aaaa| 精品乱码一区二区三区四区| 亚洲精品视频一二三| 老司机午夜精品| 中日韩一级黄色片| 91精品国产全国免费观看| 久久精品视频观看| 91传媒视频免费| 国内久久视频| 国产精品成人无码专区| 精品久久久久久久久久久久久| 手机av免费在线观看| 欧美性一区二区三区| 蜜臀91精品国产高清在线观看| 哪个网站能看毛片| 国产三级精品视频| 91亚洲视频在线观看| 久久天天躁夜夜躁狠狠躁2022| 高清在线一区二区| 国产尤物av一区二区三区| 成人福利视频网站| 中文字幕视频网| 一个色综合导航| 亚洲成a人片777777久久| 日韩在线视频在线| 久久尤物电影视频在线观看| 老熟妇一区二区三区啪啪| 久久精品99国产精品酒店日本| 亚洲精品一区二区三区在线| 欧美网站免费观看| 中文在线免费一区三区高中清不卡| 国产精品视频一区二区三区,| 久久久女女女女999久久| 久久99高清| 亚洲成人av免费观看| 疯狂欧美牲乱大交777| 337p日本欧洲亚洲大胆鲁鲁| 999国产在线| 久久亚洲风情| 特级片在线观看| 亚洲欧美日本另类| 国产一区 二区| 日本成熟性欧美| 欧美大片xxxx| 精品播放一区二区| 精灵使的剑舞无删减版在线观看| 亚洲自拍欧美色图| 国产视频一区三区| 久久精品亚洲a| 日韩av一区二区在线| 国产综合色激情| 少妇av一区二区三区无码| 国产精品久久久久久久久久久免费看 | 国产对白videos麻豆高潮| 精品久久久影院| 日韩漫画puputoon| 97免费视频观看| 中文字幕av在线一区二区三区| 亚洲一区在线观|