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

SQL優(yōu)化極簡法則,還有誰不會?

數(shù)據(jù)庫 SQL Server
SQL 作為關(guān)系型數(shù)據(jù)庫的標準語言,是 IT 從業(yè)人員必不可少的技能之一。SQL 本身并不難學(xué),編寫查詢語句也很容易,但是想要編寫出能夠高效運行的查詢語句卻有一定的難度。

SQL 作為關(guān)系型數(shù)據(jù)庫的標準語言,是 IT 從業(yè)人員必不可少的技能之一。SQL 本身并不難學(xué),編寫查詢語句也很容易,但是想要編寫出能夠高效運行的查詢語句卻有一定的難度。

查詢優(yōu)化是一個復(fù)雜的工程,涉及從硬件到參數(shù)配置、不同數(shù)據(jù)庫的解析器、優(yōu)化器實現(xiàn)、SQL 語句的執(zhí)行順序、索引以及統(tǒng)計信息的采集等,甚至應(yīng)用程序和系統(tǒng)的整體架構(gòu)。本文介紹幾個關(guān)鍵法則,可以幫助我們編寫高效的 SQL 查詢;尤其是對于初學(xué)者而言,這些法則至少可以避免我們寫出性能很差的查詢語句。

以下法則適用于各種關(guān)系型數(shù)據(jù)庫,包括但不限于:MySQL、Oracle、SQL Server、PostgreSQL 以及 SQLite 等。

法則一:只返回需要的結(jié)果

一定要為查詢語句指定 WHERE 條件,過濾掉不需要的數(shù)據(jù)行。通常來說,OLTP 系統(tǒng)每次只需要從大量數(shù)據(jù)中返回很少的幾條記錄;指定查詢條件可以幫助我們通過索引返回結(jié)果,而不是全表掃描。絕大多數(shù)情況下使用索引時的性能更好,因為索引(B-樹、B+樹、B*樹)執(zhí)行的是二進制搜索,具有對數(shù)時間復(fù)雜度,而不是線性時間復(fù)雜度。以下是 MySQL 聚簇索引的示意圖:

舉例來說,假設(shè)每個索引分支節(jié)點可以存儲 100 個記錄,100 萬(1003)條記錄只需要 3 層 B-樹即可完成索引。通過索引查找數(shù)據(jù)時需要讀取 3 次索引數(shù)據(jù)(每次磁盤 IO 讀取整個分支節(jié)點),加上 1 次磁盤 IO 讀取數(shù)據(jù)即可得到查詢結(jié)果。

相反,如果采用全表掃描,需要執(zhí)行的磁盤 IO 次數(shù)可能高出幾個數(shù)量級。當數(shù)據(jù)量增加到 1 億(1004)時,B-樹索引只需要再增加 1 次索引 IO 即可;而全表掃描則需要再增加幾個數(shù)量級的 IO。

同理,我們應(yīng)該避免使用 SELECT * FROM, 因為它表示查詢表中的所有字段。這種寫法通常導(dǎo)致數(shù)據(jù)庫需要讀取更多的數(shù)據(jù),同時網(wǎng)絡(luò)也需要傳輸更多的數(shù)據(jù),從而導(dǎo)致性能的下降。

法則二:確保查詢使用了正確的索引

如果缺少合適的索引,即使指定了查詢條件也不會通過索引查找數(shù)據(jù)。因此,我們首先需要確保創(chuàng)建了相應(yīng)的索引。一般來說,以下字段需要創(chuàng)建索引:

  • 經(jīng)常出現(xiàn)在 WHERE 條件中的字段建立索引可以避免全表掃描;
  • 將 ORDER BY 排序的字段加入到索引中,可以避免額外的排序操作;
  • 多表連接查詢的關(guān)聯(lián)字段建立索引,可以提高連接查詢的性能;
  • 將 GROUP BY 分組操作字段加入到索引中,可以利用索引完成分組。

即使創(chuàng)建了合適的索引,如果 SQL 語句寫的有問題,數(shù)據(jù)庫也不會使用索引。導(dǎo)致索引失效的常見問題包括:

  • 在 WHERE 子句中對索引字段進行表達式運算或者使用函數(shù)都會導(dǎo)致索引失效,這種情況還包括字段的數(shù)據(jù)類型不匹配,例如字符串和整數(shù)進行比較;
  • 使用 LIKE 匹配時,如果通配符出現(xiàn)在左側(cè)無法使用索引。對于大型文本數(shù)據(jù)的模糊匹配,應(yīng)該考慮數(shù)據(jù)庫提供的全文檢索功能,甚至專門的全文搜索引擎(Elasticsearch 等);
  • 如果 WHERE 條件中的字段上創(chuàng)建了索引,盡量設(shè)置為 NOT NULL;不是所有數(shù)據(jù)庫使用 IS [NOT] NULL 判斷時都可以利用索引。

執(zhí)行計劃(execution plan,也叫查詢計劃或者解釋計劃)是數(shù)據(jù)庫執(zhí)行 SQL 語句的具體步驟,例如通過索引還是全表掃描訪問表中的數(shù)據(jù),連接查詢的實現(xiàn)方式和連接的順序等。如果 SQL 語句性能不夠理想,我們首先應(yīng)該查看它的執(zhí)行計劃,通過執(zhí)行計劃確保查詢使用了正確的索引

法則三:盡量避免使用子查詢

以 MySQL 為例,以下查詢返回月薪大于部門平均月薪的員工信息:

EXPLAIN ANALYZE
 SELECT emp_id, emp_name
   FROM employee e
   WHERE salary > (
     SELECT AVG(salary)
       FROM employee
       WHERE dept_id = e.dept_id);
-> Filter: (e.salary > (select #2))  (cost=2.75 rows=25) (actual time=0.232..4.401 rows=6 loops=1)
    -> Table scan on e  (cost=2.75 rows=25) (actual time=0.099..0.190 rows=25 loops=1)
    -> Select #2 (subquery in condition; dependent)
        -> Aggregate: avg(employee.salary)  (actual time=0.147..0.149 rows=1 loops=25)
            -> Index lookup on employee using idx_emp_dept (dept_id=e.dept_id)  (cost=1.12 rows=5) (actual time=0.068..0.104 rows=7 loops=25)

從執(zhí)行計劃可以看出,MySQL 中采用的是類似 Nested Loop Join 實現(xiàn)方式;子查詢循環(huán)了 25 次,而實際上可以通過一次掃描計算并緩存每個部門的平均月薪。以下語句將該子查詢替換為等價的 JOIN 語句,實現(xiàn)了子查詢的展開(Subquery Unnest):

EXPLAIN ANALYZE
 SELECT e.emp_id, e.emp_name
   FROM employee e
   JOIN (SELECT dept_id, AVG(salary) AS dept_average
           FROM employee
          GROUP BY dept_id) t
     ON e.dept_id = t.dept_id
  WHERE e.salary > t.dept_average;
-> Nested loop inner join  (actual time=0.722..2.354 rows=6 loops=1)
    -> Table scan on e  (cost=2.75 rows=25) (actual time=0.096..0.205 rows=25 loops=1)
    -> Filter: (e.salary > t.dept_average)  (actual time=0.068..0.076 rows=0 loops=25)
        -> Index lookup on t using <auto_key0> (dept_id=e.dept_id)  (actual time=0.011..0.015 rows=1 loops=25)
            -> Materialize  (actual time=0.048..0.057 rows=1 loops=25)
                -> Group aggregate: avg(employee.salary)  (actual time=0.228..0.510 rows=5 loops=1)
                    -> Index scan on employee using idx_emp_dept  (cost=2.75 rows=25) (actual time=0.181..0.348 rows=25 loops=1)

改寫之后的查詢利用了物化(Materialization)技術(shù),將子查詢的結(jié)果生成一個內(nèi)存臨時表;然后與 employee 表進行連接。通過實際執(zhí)行時間可以看出這種方式更快。

以上示例在 Oracle 和 SQL Server 中會自動執(zhí)行子查詢展開,兩種寫法效果相同;在 PostgreSQL 中與 MySQL 類似,第一個語句使用 Nested Loop Join,改寫為 JOIN 之后使用 Hash Join 實現(xiàn),性能更好。

另外,對于 IN 和 EXISTS 子查詢也可以得出類似的結(jié)論。由于不同數(shù)據(jù)庫的優(yōu)化器能力有所差異,我們應(yīng)該盡量避免使用子查詢,考慮使用 JOIN 進行重寫

法則四:不要使用OFFSET實現(xiàn)分頁

分頁查詢的原理就是先跳過指定的行數(shù),再返回 Top-N 記錄。分頁查詢的示意圖如下:

數(shù)據(jù)庫一般支持 FETCH/LIMIT 以及 OFFSET 實現(xiàn) Top-N 排行榜和分頁查詢。當表中的數(shù)據(jù)量很大時,這種方式的分頁查詢可能會導(dǎo)致性能問題。以 MySQL 為例:

-- MySQL
SELECT *
  FROM large_table
 ORDER BY id
 LIMIT 10 OFFSET N;

以上查詢隨著 OFFSET 的增加,速度會越來越慢;因為即使我們只需要返回 10 條記錄,數(shù)據(jù)庫仍然需要訪問并且過濾掉 N(比如 1000000)行記錄,即使通過索引也會涉及不必要的掃描操作。

對于以上分頁查詢,更好的方法是記住上一次獲取到的最大 id,然后在下一次查詢中作為條件傳入:

-- MySQL
SELECT *
  FROM large_table
 WHERE id > last_id
 ORDER BY id
 LIMIT 10;

如果 id 字段上存在索引,這種分頁查詢的方式可以基本不受數(shù)據(jù)量的影響。

法則五:了解SQL子句的邏輯執(zhí)行順序

以下是 SQL 中各個子句的語法順序,前面括號內(nèi)的數(shù)字代表了它們的邏輯執(zhí)行順序:

(6)SELECT [DISTINCT | ALL] col1, col2, agg_func(col3) AS alias
(1)  FROM t1 JOIN t2
(2)    ON (join_conditions)
(3) WHERE where_conditions
(4) GROUP BY col1, col2
(5)HAVING having_condition
(7) UNION [ALL]
   ...
(8) ORDER BY col1 ASC,col2 DESC
(9)OFFSET m ROWS FETCH NEXT num_rows ROWS ONLY;

也就是說,SQL 并不是按照編寫順序先執(zhí)行 SELECT,然后再執(zhí)行 FROM 子句。從邏輯上講,SQL 語句的執(zhí)行順序如下:

  1. 首先,FROM 和 JOIN 是 SQL 語句執(zhí)行的第一步。它們的邏輯結(jié)果是一個笛卡爾積,決定了接下來要操作的數(shù)據(jù)集。注意邏輯執(zhí)行順序并不代表物理執(zhí)行順序,實際上數(shù)據(jù)庫在獲取表中的數(shù)據(jù)之前會使用 ON 和 WHERE 過濾條件進行優(yōu)化訪問;
  2. 其次,應(yīng)用 ON 條件對上一步的結(jié)果進行過濾并生成新的數(shù)據(jù)集
  3. 然后,執(zhí)行 WHERE 子句對上一步的數(shù)據(jù)集再次進行過濾。WHERE 和 ON 大多數(shù)情況下的效果相同,但是外連接查詢有所區(qū)別,我們將會在下文給出示例;
  4. 接著,基于 GROUP BY 子句指定的表達式進行分組;同時,對于每個分組計算聚合函數(shù) agg_func 的結(jié)果。經(jīng)過 GROUP BY 處理之后,數(shù)據(jù)集的結(jié)構(gòu)就發(fā)生了變化,只保留了分組字段和聚合函數(shù)的結(jié)果;
  5. 如果存在 GROUP BY 子句,可以利用 HAVING 針對分組后的結(jié)果進一步進行過濾,通常是針對聚合函數(shù)的結(jié)果進行過濾;
  6. 接下來,SELECT 可以指定要返回的列;如果指定了 DISTINCT 關(guān)鍵字,需要對結(jié)果集進行去重操作。另外還會為指定了 AS 的字段生成別名;
  7. 如果還有集合操作符(UNION、INTERSECT、EXCEPT)和其他的 SELECT 語句,執(zhí)行該查詢并且合并兩個結(jié)果集。對于集合操作中的多個 SELECT 語句,數(shù)據(jù)庫通常可以支持并發(fā)執(zhí)行;
  8. 然后,應(yīng)用 ORDER BY 子句對結(jié)果進行排序。如果存在 GROUP BY 子句或者 DISTINCT 關(guān)鍵字,只能使用分組字段和聚合函數(shù)進行排序;否則,可以使用 FROM 和 JOIN 表中的任何字段排序;
  9. 最后,OFFSET 和 FETCH(LIMIT、TOP)限定了最終返回的行數(shù)

了解 SQL 邏輯執(zhí)行順序可以幫助我們進行 SQL 優(yōu)化。例如 WHERE 子句在 HAVING 子句之前執(zhí)行,因此我們應(yīng)該盡量使用 WHERE 進行數(shù)據(jù)過濾,避免無謂的操作;除非業(yè)務(wù)需要針對聚合函數(shù)的結(jié)果進行過濾。

除此之外,理解 SQL 的邏輯執(zhí)行順序還可以幫助我們避免一些常見的錯誤,例如以下語句:

-- 錯誤示例
SELECT emp_name AS empname
  FROM employee
 WHERE empname ='張飛';

該語句的錯誤在于 WHERE 條件中引用了列別名;從上面的邏輯順序可以看出,執(zhí)行 WHERE 條件時還沒有執(zhí)行 SELECT 子句,也就沒有生成字段的別名。

另外一個需要注意的操作就是 GROUP BY,例如:

-- GROUP BY 錯誤示例
SELECT dept_id, emp_name, AVG(salary)
  FROM employee
 GROUP BY dept_id;

由于經(jīng)過 GROUP BY 處理之后結(jié)果集只保留了分組字段和聚合函數(shù)的結(jié)果,示例中的 emp_name 字段已經(jīng)不存在;從業(yè)務(wù)邏輯上來說,按照部門分組統(tǒng)計之后再顯示某個員工的姓名沒有意義。如果需要同時顯示員工信息和所在部門的匯總,可以使用窗口函數(shù)。

如果使用了 GROUP BY 分組,之后的 SELECT、ORDER BY 等只能引用分組字段或者聚合函數(shù);否則,可以引用 FROM 和 JOIN 表中的任何字段。

還有一些邏輯問題可能不會直接導(dǎo)致查詢出錯,但是會返回不正確的結(jié)果;例如外連接查詢中的 ON 和 WHERE 條件。以下是一個左外連接查詢的示例:

SELECT e.emp_name, d.dept_name
  FROM employee e
  LEFT JOIN department d ON (e.dept_id = d.dept_id)
 WHERE e.emp_name ='張飛';
emp_name|dept_name|
--------|---------|
張飛     |行政管理部|

SELECT e.emp_name, d.dept_name
  FROM employee e
  LEFT JOIN department d ON (e.dept_id = d.dept_id AND e.emp_name ='張飛');
emp_name|dept_name|
--------|---------|
劉備     |   [NULL]|
關(guān)羽     |   [NULL]|
張飛     |行政管理部|
諸葛亮   |   [NULL]|
...

第一個查詢在 ON 子句中指定了連接的條件,同時通過 WHERE 子句找出了“張飛”的信息。

第二個查詢將所有的過濾條件都放在 ON 子句中,結(jié)果返回了所有的員工信息。這是因為左外連接會返回左表中的全部數(shù)據(jù),即使 ON 子句中指定了員工姓名也不會生效;而 WHERE 條件在邏輯上是對連接操作之后的結(jié)果進行過濾。

總結(jié)

SQL 優(yōu)化本質(zhì)上是了解優(yōu)化器的的工作原理,并且為此創(chuàng)建合適的索引和正確的語句;同時,當優(yōu)化器不夠智能的時候,手動讓它智能。

責任編輯:華軒 來源: SQL編程思想
相關(guān)推薦

2021-01-05 09:25:35

SQL優(yōu)化查詢

2022-03-16 11:11:37

SpringBean項目

2022-10-10 14:41:44

RedisJVM數(shù)據(jù)

2025-08-08 09:31:38

2022-08-12 09:31:05

數(shù)據(jù)查詢

2021-12-27 09:52:43

數(shù)據(jù)庫優(yōu)化SQL

2016-12-06 10:07:01

銳捷網(wǎng)絡(luò)

2014-05-04 13:47:39

銳捷網(wǎng)絡(luò)極簡網(wǎng)絡(luò)

2016-12-28 10:00:03

銳捷網(wǎng)絡(luò)

2022-07-11 14:23:09

加密貨幣比特幣以太坊

2023-01-03 08:32:38

2010-06-10 00:46:39

2022-05-01 21:49:06

Python

2011-12-16 16:19:58

移動Web

2021-11-14 23:05:28

GoCast語言

2023-11-10 09:25:36

Oracle數(shù)據(jù)庫

2020-07-13 15:10:47

Python代碼字符串

2021-10-18 05:00:38

語言GoRequestHTTP

2022-09-02 17:12:16

BlackboxLinux

2021-08-10 18:45:44

銳捷網(wǎng)絡(luò)
點贊
收藏

51CTO技術(shù)棧公眾號

久久不射网站| 卡通动漫国产精品| 亚洲精选免费视频| 国产福利一区二区三区在线观看| 日本亚洲色大成网站www久久| 欧美jizz19性欧美| 欧美日韩免费不卡视频一区二区三区| 国产盗摄视频在线观看| 欧美熟妇另类久久久久久不卡| 性久久久久久| 欧美大成色www永久网站婷| 韩国无码一区二区三区精品| 国产精品久久久久77777丨| 一区二区三区在线高清| 日本一区二区三不卡| 国产成人三级一区二区在线观看一 | 欧美综合一区二区三区| 日本天堂免费a| 国产中文在线| www.久久久久久久久| 国产精品爽黄69天堂a| 天天插天天操天天干| 999久久久免费精品国产| 亚洲娇小xxxx欧美娇小| 免费在线观看污网站| 男人皇宫亚洲男人2020| 亚洲一区在线观看视频| 一区二区三区四区视频在线| 外国精品视频在线观看| 蜜桃视频在线观看一区| 2019中文在线观看| 精品在线视频免费观看| 久久精品欧美一区| 色妞色视频一区二区三区四区| 天堂在线中文在线| 最好看的日本字幕mv视频大全| 精品成人久久| 日韩有码在线观看| 青娱乐国产视频| 欧美影院天天5g天天爽| 欧美va天堂va视频va在线| 182午夜在线观看| 久久久一本精品| 黄色成人av在线| 久久精品无码中文字幕| 69成人在线| 综合色天天鬼久久鬼色| 日韩视频专区| 国产一区二区影视| 久久精品在线观看| 欧美乱偷一区二区三区在线| 黄色av网址在线| 国产激情视频一区二区三区欧美 | 在线日韩精品视频| 99久久久无码国产精品性| 精品在线网站观看| 亚洲成人三级在线| 午夜剧场免费看| 国产精品15p| 亚洲激情久久久| 呦呦视频在线观看| 一本久久青青| 亚洲欧美日韩国产中文专区| 成年人网站免费看| 国产传媒欧美日韩成人精品大片| 精品一区二区三区三区| 国产精品无码在线| 亚洲另类春色校园小说| 亚洲人成免费电影| 香蕉久久久久久久| 亚洲欧美色图| 久久久午夜视频| 国产又粗又爽视频| 人人超碰91尤物精品国产| 国产精品美乳一区二区免费| 这里只有精品国产| 国产一区二区三区美女| 国产富婆一区二区三区| 亚洲色图狠狠干| 欧美极品aⅴ影院| 一区二区三区四区欧美日韩| 中文字幕中文字幕在线中高清免费版| 一个色妞综合视频在线观看| 国产精品久久久久9999爆乳| 韩国成人二区| 欧美在线观看一区二区| 亚欧美一区二区三区| 国产精品一区二区三区www| 精品女同一区二区| 日韩精品无码一区二区三区久久久| 超碰成人久久| 欧美黄色片免费观看| 亚洲久久在线观看| 九一久久久久久| 精品国产一二| 欧美精品hd| 亚洲1区2区3区视频| 亚洲不卡视频在线| 爱爱精品视频| 亚洲色图17p| 成人免费毛片东京热| 国产亚洲精品bv在线观看| 国产精品香蕉在线观看| 欧美视频xxx| 国产精品视频一二| 日本十八禁视频无遮挡| 国产一区精品福利| 亚洲国产欧美日韩精品| 999精品在线视频| 中文日韩欧美| 91青草视频久久| 韩国中文字幕2020精品| 亚洲激情在线激情| 九九热免费精品视频| 粉嫩的18在线观看极品精品| 夜夜躁日日躁狠狠久久88av | 亚洲成人av免费| 在线观看免费视频高清游戏推荐| aiai久久| 九九热这里只有在线精品视| 69xxxx国产| av在线不卡电影| av中文字幕av| 免费视频观看成人| 亚洲欧美一区二区激情| 国产香蕉在线视频| 国产精品996| 亚洲一区二区三区四区中文| 中文在线8资源库| 亚洲国产精品小视频| 欧美国产日韩在线观看成人 | 国产精品视频精品| 欧洲亚洲精品视频| 欧美日韩激情视频8区| 国产伦精品一区二区三区妓女下载| 成人精品电影| 国产精品99导航| 三级毛片在线免费看| 亚洲成人资源在线| 精品人妻二区中文字幕| 一本一本久久a久久综合精品| 国产精品美乳一区二区免费| 日本aaa在线观看| 狠狠爱在线视频一区| 成人做爰www看视频软件| 一区二区影院| 97人人模人人爽人人少妇| 日本成人网址| 在线播放中文一区| 中文字幕美女视频| 久久国产综合精品| 色乱码一区二区三区熟女| 狂野欧美性猛交xxxx| 色偷偷亚洲男人天堂| 男操女视频网站| 欧美高清在线一区| 99re精彩视频| 66久久国产| 99久久99久久| missav|免费高清av在线看| 精品国产91乱码一区二区三区| 欧洲猛交xxxx乱大交3| 丁香婷婷深情五月亚洲| 三上悠亚久久精品| 亚洲黄页在线观看| 国产精品视频一区二区高潮| 日本最黄一级片免费在线| 欧美久久免费观看| 妺妺窝人体色www聚色窝仙踪 | 一本色道久久综合一区| 国产一区二区无遮挡| 久草在线资源福利站| 亚洲男人的天堂在线播放| 黄色av一区二区| 亚洲欧美乱综合| 婷婷五月精品中文字幕| 国产精品免费看| 日韩理论片在线观看| 91成人福利社区| 久久久久久中文| 欧美黄色小说| 欧美精品v国产精品v日韩精品| 欧美日韩精品亚洲精品| 91麻豆swag| www.久久久精品| 国产伊人精品| 日本免费高清一区二区| 国产亚洲字幕| 欧美做爰性生交视频| 黄色网址在线免费观看| 亚洲激情电影中文字幕| 一道本无吗一区| 亚洲高清在线视频| 精品成人无码一区二区三区| 国产一区二区三区精品欧美日韩一区二区三区 | а√在线中文在线新版| 国产亚洲人成a一在线v站| 国产强伦人妻毛片| 欧美日韩一区二区三区| 精品无码一区二区三区蜜臀| www.亚洲色图.com| 国产视频1区2区3区| 亚洲国内欧美| 中文字幕中文字幕在线中一区高清 | 亚洲无吗在线| 亚洲激情一区二区| 免费福利视频一区| 国产在线观看不卡| 自拍偷拍欧美视频| 欧美日韩国产成人在线观看| www.亚洲视频| 亚洲激情成人网| 精品国产乱码一区二区三| 日韩欧美999| 久久久精品99| 亚洲欧洲另类国产综合| 一本加勒比北条麻妃| 国产成人精品免费网站| 一级片视频免费观看| 国产精品一国产精品k频道56| 免费观看黄色的网站| 国内精品久久久久久久影视简单| 国产精华一区| 日韩精品一级| 国产一区二中文字幕在线看| 欧美gay囗交囗交| 久久久久久久久91| 免费成人黄色| 中文字幕亚洲欧美日韩在线不卡| 无码国精品一区二区免费蜜桃| 欧美一区二区三区在线看| 亚洲精品91天天久久人人| 午夜精品久久一牛影视| 精品一区二区三区人妻| 一个色妞综合视频在线观看| 娇小11一12╳yⅹ╳毛片| 国产欧美综合色| 人妻熟女aⅴ一区二区三区汇编| 国产精品99久久久久| 日韩欧美中文视频| 加勒比av一区二区| 香蕉视频999| 久久精品国产亚洲高清剧情介绍 | 亚洲最新av在线| 日本福利在线观看| 日韩精品亚洲视频| 日韩一区av| 亚洲精品视频播放| 免费理论片在线观看播放老| 日韩国产在线看| 神宫寺奈绪一区二区三区| 亚洲成人激情视频| 无码国产伦一区二区三区视频| 亚洲精品国产精品乱码不99按摩 | 亚洲少妇中文在线| 黄色免费在线播放| 一区二区在线免费视频| 91网页在线观看| 日韩在线观看免费高清完整版| 日本暖暖在线视频| 欧美精品一二区| 五月花成人网| 97免费中文视频在线观看| 热三久草你在线| 国产91免费观看| 久久久加勒比| 92国产精品久久久久首页| 欧美高清hd| 韩日午夜在线资源一区二区| 欧美电影在线观看免费| 欧洲一区二区在线| 欧美aaaaaaaaaaaa| 久久久久福利视频| 国产情侣一区| 国产三级三级看三级| 国产精品一区在线| 欧美一级片黄色| 欧美国产精品一区二区| 欧美被狂躁喷白浆精品| 亚洲第一福利一区| 国产一区免费看| 91精品国产综合久久久蜜臀粉嫩 | 久久久久久久久99精品| 最新中文字幕av| 亚洲在线视频免费观看| 国产伦精品一区二区三区视频我| 欧美丝袜丝交足nylons| 国产激情视频在线播放| 日韩av在线免费| 蜜芽在线免费观看| 欧美又大又硬又粗bbbbb| 成人免费一区| 激情伦成人综合小说| 色小子综合网| 精品视频免费在线播放| 美女一区二区视频| 日本一区二区在线免费观看| 日本一区二区三区在线不卡 | 国产秀色在线www免费观看| 久久久久久久久久久久av| 久久xxx视频| 精品产品国产在线不卡| 99热国内精品| 国产淫片免费看| 国产精品一区二区你懂的| 精品国产无码在线观看| 一区二区在线电影| 亚洲av人无码激艳猛片服务器| 欧美videossexotv100| av在线二区| 欧美一区二区三区……| 天堂精品在线视频| 午夜欧美性电影| 亚洲一区二区毛片| 日本50路肥熟bbw| 综合av第一页| 真实新婚偷拍xxxxx| 亚洲国内精品视频| 午夜伦理在线视频| 91视频免费在线| 日本a级不卡| 日本黄网站免费| 97精品国产露脸对白| 国产三级国产精品国产国在线观看| 在线一区二区视频| 天堂中文字幕在线| 久久久噜噜噜久久中文字免| a一区二区三区亚洲| 视频一区二区三区免费观看| 国产精品一二| 人妻在线日韩免费视频| 亚洲国产综合人成综合网站| 国产一区二区网站| 中文字幕亚洲激情| 国产91在线播放精品| 欧美一区观看| 久久亚洲一区| 波多野吉衣中文字幕| 欧美色视频日本版| 天堂av在线播放| 97国产一区二区精品久久呦| 亚洲国产一区二区三区网站| 国产一区一区三区| 国内久久婷婷综合| 欧美日韩综合一区二区| 91精品国产手机| 在线看三级电影| 99久久精品免费看国产四区| 一区二区三区国产精华| 尤物网站在线看| 亚洲激情成人在线| 亚洲国产成人一区二区| 久久久久久国产三级电影| 美腿丝袜亚洲图片| 各处沟厕大尺度偷拍女厕嘘嘘| 91天堂素人约啪| 日批视频免费在线观看| 亚洲性日韩精品一区二区| 91福利精品在线观看| 综合一区中文字幕| 国产成人精品影视| 日韩久久精品视频| 亚洲色图校园春色| 日韩欧国产精品一区综合无码| 中文字幕一区二区三区最新 | 国产农村妇女精品一二区| 久久久久亚洲av无码专区桃色| 在线观看日韩电影| 亚洲1卡2卡3卡4卡乱码精品| 成人免费视频a| 激情丁香综合| 中文字幕在线看高清电影| 欧美午夜寂寞影院| 91蜜桃在线视频| 精品欧美一区二区精品久久| 久久青草久久| 少妇高潮在线观看| 亚洲成人av在线播放| 国产亚洲一区二区手机在线观看 | 日韩精品高清在线观看| 影视一区二区三区| 糖心vlog在线免费观看| av中文字幕不卡| 国产精品免费无遮挡无码永久视频| 中文字幕在线精品| 51精品国产| 亚洲不卡视频在线| 亚洲成人av一区| 98在线视频| 国产精品一级久久久| 日本大胆欧美人术艺术动态| 免费在线观看黄色小视频| 亚洲国产精品久久精品怡红院| 午夜无码国产理论在线| 一本大道东京热无码aⅴ| 久久久www成人免费毛片麻豆 | 91丨九色porny丨蝌蚪| 亚洲综合五月天婷婷丁香| 久久久久久成人精品| 色999日韩|