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

少妇性bbb搡bbb爽爽爽欧美| 福利一区二区三区四区| 国产伊人久久| 亚洲综合在线第一页| 国产在线精品一区二区三区》| 性无码专区无码| 成人羞羞在线观看网站| 欧美一区二区三区男人的天堂| 男女啪啪免费视频网站| 福利成人在线观看| 国产成人在线视频网站| 青青青国产精品一区二区| 久久精品在线观看视频| 国产精品乱战久久久| 91官网在线免费观看| 色婷婷777777仙踪林| 国际av在线| 成人免费不卡视频| 国产专区欧美专区| av资源免费观看| 91精品啪在线观看国产81旧版| 日韩大片免费观看视频播放| 欧洲在线免费视频| 日韩一区二区三区免费视频| 午夜精品在线看| 香蕉精品视频在线| 国产在线视频资源| 成人av电影免费观看| 成人黄色大片在线免费观看| 免费又黄又爽又猛大片午夜| aⅴ色国产欧美| 欧美日韩成人在线播放| 一级在线观看视频| 妖精视频一区二区三区免费观看 | 波多野结衣国产| 中文字幕一区二区三区久久网站| 中文字幕日韩av| 精品人妻一区二区三区蜜桃视频| 国内露脸中年夫妇交换精品| 91精品久久久久久久99蜜桃 | 久久99最新地址| 青青久久av北条麻妃黑人| 国产极品美女高潮无套嗷嗷叫酒店| 国产精品99视频| 日韩在线视频二区| 欧美另类69xxxx| 成人女性视频| 亚洲桃花岛网站| 李宗瑞91在线正在播放| 日韩极品少妇| 亚洲欧美www| 国产精品无码一区二区三区| 亚洲动漫精品| 日韩国产欧美精品在线| 欧美肉大捧一进一出免费视频| 亚洲综合影院| 亚洲成人1234| 久久久老熟女一区二区三区91| 一区二区三区自拍视频| 日韩欧美视频在线| 激情av中文字幕| 成人精品毛片| 欧美一区二区福利在线| 亚洲伊人久久综合| 黄色三级视频在线| 四虎影院观看视频在线观看 | 亚洲精品按摩视频| 性欧美丰满熟妇xxxx性久久久| 牛牛影视久久网| 日韩精品欧美国产精品忘忧草| 亚洲精品女人久久久| 亚洲精品aaaaa| 中文字幕日韩av电影| 日本黄色片免费观看| 亚洲成人免费| 久久久久久香蕉网| 亚洲第一网站在线观看| 美女尤物国产一区| 91手机在线播放| 亚洲欧美自偷自拍| 国产日产欧美精品一区二区三区| 亚洲va韩国va欧美va精四季| 免费在线观看av片| 亚洲精品va在线观看| 亚洲熟妇无码一区二区三区| 欧美大片1688| 91精品国产乱| 欧美xxxxx少妇| 国产一区二区三区电影在线观看| 色七七影院综合| 久久久久久久久97| 噜噜噜躁狠狠躁狠狠精品视频| 国产精品美女久久久久av超清| 91丨九色丨蝌蚪丨对白| 成人黄色综合网站| 五月婷婷一区| 美女精品导航| 欧美无乱码久久久免费午夜一区| 人人爽人人爽av| 欧美日韩一区二区三区在线电影| 中文字幕视频在线免费欧美日韩综合在线看 | 99视频有精品高清视频| 欧美本精品男人aⅴ天堂| 女尊高h男高潮呻吟| 天天揉久久久久亚洲精品| 韩剧1988免费观看全集| 亚洲无码精品国产| 成人免费视频caoporn| 亚洲不卡1区| 1769免费视频在线观看| 在线欧美日韩精品| 日本一级片在线播放| 99re66热这里只有精品8| 97国产精品视频人人做人人爱| 亚洲影院一区二区三区| 久久久影视传媒| av在线免费观看国产| 成人精品国产亚洲| 亚洲精品aⅴ中文字幕乱码| 裸体武打性艳史| 日本网站在线观看一区二区三区| 国产精品免费一区二区三区在线观看 | 国产一区不卡精品| 日韩欧美精品久久| 福利影院在线看| 91精品国产高清一区二区三区蜜臀| 偷拍女澡堂一区二区三区| 伊人色**天天综合婷婷| 国产在线不卡精品| 成人免费在线观看| 日本乱码高清不卡字幕| 无遮挡aaaaa大片免费看| 国产伊人精品| 成人免费视频视频在| 黄网站免费在线播放| 欧美三级中文字幕| 成人午夜剧场视频网站| 在线亚洲免费| 精品视频在线观看| a级大胆欧美人体大胆666| 日韩一区二区高清| caoporn91| 国产精品资源网站| 久久最新免费视频| 久久国际精品| 欧美丰满少妇xxxxx做受| 国产免费黄色大片| 亚洲精品中文字幕乱码三区 | 超碰在线观看91| 久久久影视传媒| 亚洲精品高清无码视频| 狠狠色丁香婷婷综合影院| 国产成人在线一区| 国产福利第一视频在线播放| 在线免费观看日本一区| 亚洲国产天堂av| 麻豆精品视频在线观看免费| 一区二区三区四区不卡| 在线成人免费| 欧美久久久精品| 欧美 中文字幕| 欧美天天综合色影久久精品| 人妻大战黑人白浆狂泄| 视频在线观看国产精品| 天堂av一区二区| 日韩精品免费观看视频| 精品国产欧美一区二区五十路 | 日本少妇激情舌吻| 91在线观看下载| 日韩一级免费在线观看| 久久久综合色| 91久久国产综合久久蜜月精品| 国产99re66在线视频| 亚洲黄页网在线观看| 国产剧情在线视频| 国产精品久久久久影院老司| 国内av免费观看| 国产欧美高清| 图片区小说区区亚洲五月| 亚洲爽爆av| 久久久久久噜噜噜久久久精品| 日本福利片在线| 欧美视频在线一区| 激情五月少妇a| 91看片淫黄大片一级| 亚洲一级免费在线观看| 黄色av一区| 日本一区不卡| 色悠久久久久综合先锋影音下载| 欧美伊久线香蕉线新在线| 午夜视频成人| 日韩av在线免费播放| 一级黄色片在线播放| 午夜久久久久久电影| 九九热久久免费视频| 成人激情文学综合网| 亚洲高清免费在线观看| 1000部精品久久久久久久久| 亚洲国产精品综合| 蜜桃一区av| 国产这里只有精品| 久草在线资源福利站| 久久亚洲精品一区| 麻豆app在线观看| 欧美成人激情免费网| 欧美在线视频精品| 亚洲成精国产精品女| 99热6这里只有精品| 99久久精品国产一区| 涩涩网站在线看| 日韩和欧美一区二区三区| 131美女爱做视频| 亚洲啊v在线观看| 日韩和欧美的一区二区| 精品精品国产三级a∨在线| 成人午夜激情免费视频| 亚洲综合av一区二区三区| 欧美亚洲在线观看| 激情网站在线| 色婷婷av一区二区三区在线观看 | 正在播放亚洲1区| 无码h黄肉3d动漫在线观看| 欧美一区二区三区爱爱| 在线免费观看一级片| 91成人国产精品| 国产精品男女视频| 亚洲 欧美综合在线网络| 欧洲美女女同性互添| 欧美国产日韩在线观看| 亚洲专区区免费| 91最新地址在线播放| 国产精品99精品无码视亚| 精品写真视频在线观看| 色悠悠久久综合网| 青青草97国产精品免费观看 | 在线观看成人av| av在线不卡免费观看| 秋霞在线观看一区二区三区| 青青操综合网| 精品国产乱码久久久久| 国产精品chinese在线观看| 超碰国产精品久久国产精品99| 成人豆花视频| 91免费观看网站| avtt久久| 91精品国产一区二区三区动漫| 国产精品国产三级在线观看| 国产在线拍偷自揄拍精品| 亚洲午夜剧场| 91九色国产在线| 国产精品视频首页| 亚洲free嫩bbb| 日本一区二区三区视频在线看 | 免费成人av| 亚洲国产精品视频一区| 91九色精品| www.黄色网址.com| 国产综合精品| 欧美精品一区二区三区三州| 亚洲欧美清纯在线制服| 国产精品少妇在线视频| 免费黄网站欧美| 亚洲黄色片免费看| 成人黄色综合网站| 日本高清www| 国产精品素人一区二区| 久久久久久久久久网站| 午夜私人影院久久久久| 7799精品视频天天看| 欧美日本一区二区三区四区 | 成人av在线电影| 国产精品揄拍100视频| 国产日产欧美精品一区二区三区| 美女福利视频网| 一区二区三区四区视频精品免费| 国产精久久久久久| 色欧美日韩亚洲| 国产精品自产拍| 亚洲第一精品自拍| 国产美女性感在线观看懂色av| 久久久91精品国产| 国产盗摄在线视频网站| 国产精品久久久久久久久久小说 | 三上悠亚亚洲一区| 国产精品自在线| 亚洲亚洲一区二区三区| 欧美日韩在线精品一区二区三区| 色综合久久网| 欧美精品一区二区三区三州| 美女视频黄 久久| 日本一级大毛片a一| 亚洲国产精品精华液ab| 久久久99精品| 欧美无砖专区一中文字| 欧美一级做性受免费大片免费| 国产一区二区三区四区福利| 亚洲色图美国十次| 国产精品精品视频一区二区三区| 亚洲精品观看| 亚洲一区二区三区免费看| 激情综合网址| 一区二区三区欧美精品| 久久久久久久综合狠狠综合| 欧美成人免费观看视频| 欧美在线观看一区| 亚洲免费成人在线| 日韩在线视频免费观看| 在线观看v片| 国产超碰91| 羞羞色午夜精品一区二区三区| 精品欧美一区免费观看α√| 国产麻豆精品一区二区| 亚洲AV无码成人精品区明星换面| 亚洲国产精品欧美一二99| 91欧美日韩麻豆精品| 国产一区二区三区视频免费| 午夜影院在线播放| 国产精品久久久久久久天堂第1集| 国产精品久久久久久影院8一贰佰| 亚洲成熟丰满熟妇高潮xxxxx| 成人性色生活片免费看爆迷你毛片| 呻吟揉丰满对白91乃国产区| 欧美性xxxx极品高清hd直播| 丰满人妻av一区二区三区| 久久这里有精品视频| 久久久加勒比| 污视频在线免费观看一区二区三区 | 日本在线观看a| 成a人片亚洲日本久久| 欧美日韩大片在线观看| 91精品国产品国语在线不卡| 香蕉视频免费在线播放| 日本中文字幕成人| 天堂一区二区三区四区| 欧洲黄色一级视频| 99久久久国产精品| 亚洲精品77777| 亚洲大胆美女视频| 51漫画成人app入口| 国产精品xxx在线观看www| 韩国av一区| 免费不卡的av| 亚洲成人av一区二区三区| 囯产精品一品二区三区| 久久久久久久久久婷婷| 精品国产18久久久久久洗澡| 日本a在线免费观看| www.欧美亚洲| 亚洲黄色小说图片| 日韩精品中文字| 成人欧美大片| 日本在线视频一区| 日韩国产一区二| 99久久久无码国产精品不卡| 欧美福利视频一区| 中文字幕在线播放网址| 99r国产精品视频| 亚洲国产三级| 精品人妻互换一区二区三区| 日本高清不卡一区| 日本高清视频在线观看| 亚洲一区二区久久久久久| 韩国精品一区二区三区| 搡老熟女老女人一区二区| 色婷婷精品大在线视频| 在线免费看av| 亚洲尤物视频网| 国产日韩欧美三区| 亚洲图片另类小说| 欧美乱妇20p| 高清在线视频不卡| 日韩成人在线资源| 国产乱子伦一区二区三区国色天香| 久久99久久98精品免观看软件 | 欧亚一区二区三区| 久久日韩视频| 韩国成人av| 日韩专区在线视频| 日本精品人妻无码77777| 日韩av在线影院| 成人精品动漫| 给我免费播放片在线观看| 国产偷国产偷亚洲高清人白洁| 91高潮大合集爽到抽搐| 久久久久久久久久婷婷| 精品久久视频| 日本天堂在线播放| 欧美性一区二区| 2020av在线| 亚洲高清在线观看一区| 成人性生交大片免费看中文| 男人天堂视频在线| 久久久久久久久国产精品| 成人三级视频| 天堂www中文在线资源| 在线观看日韩高清av| 欧美伦理免费在线| 色综合久久av| 成人高清视频在线观看| 一级片免费观看视频|