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

自制小工具大大加速MySQL SQL語句優化(附源碼)

數據庫 MySQL
優化SQL,是DBA常見的工作之一。如何高效、快速地優化一條語句,是每個DBA經常要面對的一個問題。在日常的優化工作中,我發現有很多操作是在優化過程中必不可少的步驟。

 

引言

優化SQL,是DBA常見的工作之一。如何高效、快速地優化一條語句,是每個DBA經常要面對的一個問題。在日常的優化工作中,我發現有很多操作是在優化過程中必不可少的步驟。然而這些步驟重復性的執行,又會耗費DBA很多精力。于是萌發了自己編寫小工具,提高優化效率的想法。

那選擇何種語言來開發工具呢?

對于一名DBA來說,掌握一門語言配合自己的工作是非常必要的。相對于shell的簡單、perl的飄逸,Python是一種嚴謹的高級語言。其具備上手快、語法簡單、擴展豐富、跨平臺等多種優點。很多人把它稱為一種“膠水”語言,通過大量豐富的類庫、模塊,可以快速搭建出自己需要的工具。

于是乎,這個小工具就成了我學習Python的***個作業,我把它稱之為“MySQL語句優化輔助工具”。而且從此以后,我深深愛上了Python,并開發了很多數據庫相關的小工具,以后有機會介紹給大家。

一、優化手段、步驟

下面在介紹工具使用之前,首先說明下MySQL中語句優化常用的手段、方法及需要注意的問題。這也是大家在日常手工優化中,需要了解掌握的。

1、執行計劃 — EXPLAIN命令

執行計劃是語句優化的主要切入點,通過執行計劃的判讀了解語句的執行過程。在執行計劃生成方面,MySQL與Oracle明顯不同,它不會緩存執行計劃,每次都執行“硬解析”。查看執行計劃的方法,就是使用EXPLAIN命令。

1)基本用法

EXPLAIN QUERY

當在一個Select語句前使用關鍵字EXPLAIN時,MySQL會解釋了即將如何運行該Select語句,它顯示了表如何連接、連接的順序等信息。

EXPLAIN EXTENDED QUERY

當使用EXTENDED關鍵字時,EXPLAIN產生附加信息,可以用SHOW WARNINGS瀏覽。該信息顯示優化器限定SELECT語句中的表和列名,重寫并且執行優化規則后SELECT語句是什么樣子,并且還可能包括優化過程的其它注解。在MySQL5.0及更新的版本里都可以使用,在MySQL5.1里它有額外增加了一個過濾列(filtered)。

EXPLAIN PARTITIONS QUERY

顯示的是查詢要訪問的數據分片——如果有分片的話。它只能在MySQL5.1及更新的版本里使用。

EXPLAIN FORMAT=JSON (5.6新特性)

另一個格式顯示執行計劃。可以看到諸如表間關聯方式等信息。

2)輸出字段

下面說明一下EXPLAIN輸出的字段含義,并由此學習如何判斷一個執行計劃。

id

MySQL選定的執行計劃中查詢的序列號。如果語句里沒有子查詢等情況,那么整個輸出里就只有一個SELECT,這樣一來每一行在這個列上都會顯示一個1。如果語句中使用了子查詢、集合操作、臨時表等情況,會給ID列帶來很大的復雜性。如上例中,WHERE部分使用了子查詢,其id=2的行表示一個關聯子查詢。

select_type

語句所使用的查詢類型。是簡單SELECT還是復雜SELECT(如果是后者,顯示它屬于哪一種復雜類型)。常用有以下幾種標記類型。

  •  DEPENDENT SUBQUERY

子查詢內層的***個SELECT,依賴于外部查詢的結果集。

  •  DEPENDENT UNION

子查詢中的UNION,且為UNION中從第二個SELECT開始的后面所有SELECT,同樣依賴于外部查詢的結果集。

  •  PRIMARY

子查詢中的最外層查詢,注意并不是主鍵查詢。

  •  SIMPLE

除子查詢或UNION之外的其他查詢。

  •  SUBQUERY

子查詢內層查詢的***個SELECT,結果不依賴于外部查詢結果集。

  •  UNCACHEABLE SUBQUERY

結果集無法緩存的子查詢。

  •  UNION

UNION語句中的第二個SELECT開始后面的所有SELECT,***個SELECT為PRIMARY。

  •  UNION RESULT

UNION中的合并結果。從UNION臨時表獲取結果的SELECT。

  •  DERIVED

衍生表查詢(FROM子句中的子查詢)。MySQL會遞歸執行這些子查詢,把結果放在臨時表里。在內部,服務器就把當做一個"衍生表"那樣來引用,因為臨時表就是源自子查詢。

table

這一步所訪問的數據庫中表的名稱或者SQL語句指定的一個別名表。這個值可能是表名、表的別名或者一個為查詢產生的臨時表的標識符,如派生表、子查詢或集合。

type

表的訪問方式。以下列出了各種不同類型的表連接,依次是從***的到最差的。

  •  system

系統表,表只有一行記錄。這是const表連接類型的一個特例。

  •  const

讀常量,最多只有一行匹配的記錄。由于只有一行記錄,優化程序里該行記錄的字段值可以被當作是一個恒定值。const用于在和PRIMARY KEY或UNIQUE索引中有固定值比較的情形。

  •  eq_ref

最多只會有一條匹配結果,一般是通過主鍵或唯一鍵索引來訪問。從該表中會有一行記錄被讀取出來以和從前一個表中讀取出來的記錄做聯合。與const類型不同的是,這是***的連接類型。它用在索引所有部分都用于做連接并且這個索引是一個PRIMARY KEY或UNIQUE類型。eq_ref可以用于在進行"="做比較時檢索字段。比較的值可以是固定值或者是表達式,表達示中可以使用表里的字段,它們在讀表之前已經準備好了。

  •  ref

JOIN語句中驅動表索引引用的查詢。該表中所有符合檢索值的記錄都會被取出來和從上一個表中取出來的記錄作聯合。ref用于連接程序使用鍵的最左前綴或者是該鍵不是PRIMARY KEY或UNIQUE索引(換句話說,就是連接程序無法根據鍵值只取得一條記錄)的情況。當根據鍵值只查詢到少數幾條匹配的記錄時,這就是一個不錯的連接類型。ref還可以用于檢索字段使用"="操作符來比較的時候。

  •  ref_or_null

與ref的唯一區別就是在使用索引引用的查詢之外再增加一個空值的查詢。這種連接類型類似ref,不同的是MySQL會在檢索的時候額外的搜索包含NULL值的記錄。這種連接類型的優化是從MySQL 4.1.1開始的,它經常用于子查詢。

  •  index_merge

查詢中同時使用兩個(或更多)索引,然后對索引結果進行合并(merge),再讀取表數據。這種連接類型意味著使用了Index Merge優化方法。

  •  unique_subquery

子查詢中的返回結果字段組合是主鍵或唯一約束。

  •  index_subquery

子查詢中的返回結果字段組合是一個索引(或索引組合),但不是一個主鍵或唯一索引。這種連接類型類似unique_subquery。它用子查詢來代替IN,不過它用于在子查詢中沒有唯一索引的情況下。

  •  range

索引范圍掃描。只有在給定范圍的記錄才會被取出來,利用索引來取得一條記錄。

  •  index

全索引掃描。連接類型跟ALL一樣,不同的是它只掃描索引樹。它通常會比ALL快點,因為索引文件通常比數據文件小。MySQL在查詢的字段知識單獨的索引的一部分的情況下使用這種連接類型。

  •  fulltext

全文索引掃描。

  •  all

全表掃描。

possible_keys

該字段是指MySQL在搜索表記錄時可能使用哪個索引。如果沒有任何索引可以使用,就會顯示為null。

key

查詢優化器從possible_keys中所選擇使用的索引。key字段顯示了MySQL實際上要用的索引。當沒有任何索引被用到的時候,這個字段的值就是NULL。

key_len

被選中使用索引的索引鍵長度。key_len字段顯示了MySQL使用索引的長度。當key字段的值為NULL時,索引的長度就是NULL。

ref

列出是通過常量,還是某個表的某個字段來過濾的。ref字段顯示了哪些字段或者常量被用來和key配合從表中查詢記錄出來。

rows

該字段顯示了查詢優化器通過系統收集的統計信息估算出來的結果集記錄條數。

Extra

該字段顯示了查詢中MySQL的附加信息。

filtered

這個列式在MySQL5.1里新加進去的,當使用EXPLAIN EXTENDED時才會出現。它顯示的是針對表里符合某個條件(WHERE子句或聯接條件)的記錄數的百分比所作的一個悲觀估算。

3) SQL改寫

EXPLAIN除了可以顯示執行計劃外,還可以顯示SQL改寫。所謂SQL改寫,是指MySQL在對SQL語句進行優化前,會基于一些原則進行語句的改寫,以方便后面的優化器進行優化生成更優的執行計劃。該功能是通過EXPLAIN EXTENDED+SHOW WARNINGS配合使用。下面通過示例說明一下。

從上面示例中,可看到原有語句中的IN子查詢被改寫成為表間關聯的方式。

2、統計信息

查看統計信息也是優化語句中必不可少的一步。通過統計信息可以快速了解對象的存儲特征如何。下面說明主要的兩類統計信息——表、索引。

1) 表統計信息 — SHOW TABLE STATUS

  •  Name:表名
  •  Engine:表的存儲引擎類型(ISAM、MyISAM或InnoDB)
  •  Row_format:行存儲格式(Fixed-固定的、Dynamic-動態的或Compressed-壓縮的)
  •  Rows:行數量。在某些存儲引擎中,例如MyISAM和ISAM他們存儲了精確的記錄數。不過其他存儲引擎中,它可能只是近似值。
  •  Avg_row_length:平均行長度。
  •  Data_length:數據文件的長度。
  •  Max_data_length:數據文件的***長度。
  •  Index_length:索引文件的長度。
  •  Data_free:已分配但未使用了字節數。
  •  Auto_increment:下一個autoincrement(自動加1)值。
  •  Create_time:表被創造的時間。
  •  Update_time:數據文件***更新的時間。
  •  Check_time:***對表運行一個檢查的時間。執行mysqlcheck命令后更新,僅對MyISAM有效。
  •  Create_options:額外留給CREATE TABLE的選項。
  •  Comment:當創造表時,使用的注釋(或為什么MySQL不能存取表信息的一些信息)。
  •  Version:數據表的'.frm'文件版本號。
  •  Collation:表的字符集和校正字符集。
  •  Checksum:實時的校驗和值(如果有的話)。

3、索引統計信息 — SHOW INDEX

  •  Table:表名。
  •  Non_unique:0,如果索引不能包含重復。
  •  Key_name:索引名
  •  Seq_in_index:索引中的列順序號,從1開始。
  •  Column_name:列名。
  •  Collation:列怎樣在索引中被排序。在MySQL中,這可以有值A(升序)或NULL(不排序)。
  •  Cardinality:索引中唯一值的數量。
  •  Sub_part:如果列只是部分被索引,索引字符的數量。當整個字段都做索引了,那么它的值是NULL。
  •  Packed:表示鍵值是如何壓縮的,NULL表示沒有壓縮。
  •  Null:當字段包括NULL的記錄是YES,它的值為,反之則是''。
  •  Index_type:使用了哪種索引算法(有BTREE、FULLTEXT、HASH、RTREE)。
  •  Comment:備注。
  •  系統參數:系統參數也會影響語句的執行效率。查看系統參數,可使用SHOW VARIABLES命令。

1) 參數說明

系統參數很多,下面介紹幾個。

sort_buffer_size

排序區大小。其大小直接影響排序使用的算法。如果系統中排序都比較大、內存充足且并發量不是很大的情況,可以適當增加此參數。這個參數是針對單個Thead的。

join_buffer_size

Join操作使用內存區域大小。只有當Join是ALL、index、range或index_merge時使用到Join Buffer。如果join語句較多,可以適當增大join_buffer_size。需要注意到是,這個值針對單個Thread。每個Thread都會自己創建獨立的Buffer,而不是整個系統共享的Buffer,不要設置過大而造成系統內存不足。

tmp_table_size

如果內存內的臨時表超過該值,MySQL自動將它轉換為硬盤上的MyISAM表。如果執行許多高級GROUP BY查詢并且有大量內存,則可以增加tmp_table_size的值。

read_buffer_size

讀查詢操作所能使用的緩沖區大小。這個參數是針對單個Thead的。

4、優化器開關

在MySQL中,還有一些參數是可以用來控制優化器行為的。

1) 參數說明

optimizer_search_depth

這個參數控制優化器在窮舉執行計劃時的限度。如果查詢長時間處于"statistics"狀態,可以考慮調低此參數。

optimizer_prune_level

默認是打開的,這讓優化器會根據需要掃描的行數來決定是否跳過某些執行計劃。

optimizer_switch

這個變量包含了一些開啟/關閉優化器特性的標志位。

示例 — 干預優化器行為(ICP特性)

默認情況下,ICP特性是開啟的。查看一下優化器行為。

基于二級索引的過濾查詢,使用了ICP特性,從Extra中的”Using index condition”可見。如果通過優化器開關,干預優化器行為,又會如何呢?

從Extra可見,ICP特性已經禁用。

5、系統狀態(SHOW STATUS)

MySQL中也內置了一些狀態,通過這些狀態變量也可反映出語句執行的一些情況,方便定位問題。手工執行的話,可以在執行語句的前后分別執行SHOW STATUS命令,查看狀態的變化。當然,因狀態變量很多,對比起來不太方便,后面我介紹的小工具,可以解決這個問題。

1) 狀態變量

狀態變量很多,這里介紹幾個。

Sort_merge_passes

排序算法已經執行的合并的數量。如果這個變量值較大,應考慮增加sort_buffer_size系統變量的值。

Sort_range

在范圍內執行的排序的數量。

Sort_rows

已經排序的行數。

Sort_scan

通過掃描表完成的排序的數量。

Handler_read_first

索引中***條被讀的次數。讀取索引頭的次數,如果這個值很高,說明全索引掃描很多。

Handler_read_key

根據鍵讀一行的請求數。如果較高,說明查詢和表的索引正確。

Handler_read_next

按照鍵順序讀下一行的請求數。如果你用范圍約束或如果執行索引掃描來查詢索引列,該值增加。

Handler_read_prev

按照鍵順序讀前一行的請求數。

Handler_read_rnd

根據固定位置讀一行的請求數。如果執行大量查詢并需要對結果進行排序該值較高。則可能使用了大量需要MySQL掃描整個表的查詢或連接沒有正確使用鍵。

Handler_read_rnd_next

在數據文件中讀下一行的請求數。如果正進行大量的表掃描,該值較高。通常說明表索引不正確或寫入的查詢沒有利用索引。

6、SQL性能分析器(Query Profiler)

MySQL的Query Profiler是一個使用非常方便的Query診斷分析工具,通過該工具可以獲取一條Query在整個執行過程中多種資源的消耗情況,如CPU、IO、IPC、SWAP等,以及發生的PAGE FAULTS、CONTEXT SWITCHE等,同時還能得到該Query執行過程中的MySQL所調用的各個函數在源文件中的位置。

1) 使用方法

開啟 

  1. mysql> select @@profiling;  
  2. mysql> set profiling=1

默認情況下profiling的值為0表示MySQL SQL Profiler處于OFF狀態,開啟SQL性能分析器后profiling的值為1。

執行SQL語句 

  1. mysql> select count(*) from t1; 

獲取概要信息

使用"show profile"命令獲取當前系統中保存的多個Query的profile的概要信息。 

  1. mysql> show profiles;  
  2. +----------+------------+-----------------------+  
  3. | Query_ID | Duration   | Query                  |  
  4. +----------+------------+-----------------------+  
  5. |        1 | 0.00039300 | select count(*) from t1 |  
  6. +----------+------------+-----------------------+ 

針對單個Query獲取詳細的profile信息

在獲取概要信息之后,就可以根據概要信息的Query_ID來獲取某個Query的執行過程中詳細的profile信息。 

  1. mysql> show profile for query 1;  
  2. mysql> show profile cpu,block io for query 1; 

二、工具說明

前面談到了多種手段,對于SQL語句的調優都有所幫助。通過下面這個小工具,可以自動調用命令將上面這些內容一次性推給DBA,大大加速優化的過程。

1、準備條件

模塊 - MySQLDB

模塊 - sqlparse

Python版本 = 2.7.3 (2.6.x版本應該也沒問題,3.x版本沒測試)

2、調用方法 

  1. python mysql_tuning.py -p tuning_sql.ini -s 'select xxx' 

1) 參數說明

-p 指定配置文件名稱

-s 指定SQL語句

3、配置文件

共分兩節信息,分別是[database]描述數據庫連接信息,[option]運行配置信息。

1) [database] 

  1. server_ip   = 127.0.0.1  
  2. db_user     = testuser  
  3. db_pwd      = testpwd  
  4. db_name     = test 

2) [option] 

  1. sys_parm    = ON     //是否顯示系統參數  
  2. sql_plan    = ON //是否顯示執行計劃  
  3. obj_stat    = ON //是否顯示相關對象(表、索引)統計信息  
  4. ses_status  = ON //是否顯示運行前后狀態信息(激活后會真實執行SQL)  
  5. sql_profile = ON   //是否顯示PROFILE跟蹤信息(激活后會真實執行SQL) 

4、輸出說明

1) 標題部分

包含運行數據庫的地址信息及數據版本信息。

2) 原始SQL

用戶執行輸入的SQL,這部分主要是為了后續對比SQL改寫時使用。語句顯示時使用了格式化。

3) 系統級參數

腳本選擇顯示了部分與SQL性能相關的參數。這部分是寫死在代碼中的,如需擴展需要修改腳本。

4) 優化器開關

下面是和優化器相關的一些參數,通過調整這些參數可以人為干預優化器行為。

5) 執行計劃

就是調用explain extended的輸出結果。如果結果過長,可能出現顯示串行的問題(暫時未解決)。

6) 優化器改寫后的SQL

通過這里可判斷優化器是否對SQL進行了某種優化(例如子查詢的處理)。

7) 統計信息

在SQL語句中所有涉及到的表及其索引的統計信息都會在這里顯示出來。

8) 運行狀態信息

在會話級別對比了執行前后的狀態(SHOW STATUS),并將出現變化的部分顯示出來。需要注意的是,因為收集狀態數據是采用SELECT方式,會造成個別指標的誤差(例如Com_select)。

9) PROFILE詳細信息

調用SHOW PROFILE得到的詳細信息。

10) PROFILE匯總信息

根據PROFILE的資源消耗情況,顯示不同階段消耗對比情況(TOP N),直觀顯示"瓶頸"所在。

 

責任編輯:龐桂玉 來源: segmentfault
相關推薦

2011-03-10 09:03:35

Python

2010-12-07 13:47:17

2009-11-19 08:48:10

Windows 7桌面工具

2010-07-01 10:24:30

UML小工具

2009-12-08 14:02:25

Windows 7小工

2012-02-16 10:12:23

JavaScript

2011-05-03 10:17:25

CSS

2013-12-16 17:25:08

KDEGNOME桌面應用

2022-05-31 09:42:49

工具編輯器

2022-12-28 12:29:45

duf命令

2009-07-07 08:49:33

微軟Windows 7新功能

2017-07-25 14:20:13

戴爾配置功耗

2013-03-29 14:46:33

App開發小工具輔助工具

2009-07-15 15:47:45

綜合布線驗收規范

2010-04-22 09:43:04

SQL Server

2024-09-24 17:54:26

Python開發

2019-07-11 05:53:48

MySQL死鎖數據

2022-06-08 12:10:56

canvasvue.js

2021-05-10 11:06:31

Python工具代碼

2011-11-30 16:31:00

TimZon
點贊
收藏

51CTO技術棧公眾號

最近中文字幕免费观看| 亚洲ⅴ国产v天堂a无码二区| 国模私拍视频在线播放| 91免费视频网址| 国产女人18毛片水18精品| 日本aⅴ在线观看| 美国十次av导航亚洲入口| 色94色欧美sute亚洲13| av动漫在线播放| 韩国三级在线观看久| 国产精品一区二区久久精品爱涩 | 激情欧美日韩| 在线观看国产精品淫| 国产sm在线观看| 91天天综合| 五月激情六月综合| 最近中文字幕免费mv| 欧美捆绑视频| 不卡免费追剧大全电视剧网站| 国产精品成人播放| 国产 欧美 日韩 在线| 一区二区在线| 在线观看免费高清视频97| 国产日韩视频一区| 一区二区三区日本视频| 色婷婷国产精品| 老子影院午夜伦不卡大全| av在线播放免费| 久久综合色综合88| 国产精品视频入口| 精品久久久久成人码免费动漫| 视频在线观看一区二区三区| 久久免费国产视频| 免费毛片在线播放免费| 999国产精品永久免费视频app| 亚洲视频精品在线| 最新中文字幕视频| 日韩精品导航| 亚洲国产精品成人av| 红桃视频 国产| 亚洲狼人综合| 精品视频一区二区三区免费| 国内自拍视频一区| sis001欧美| 日韩欧美高清在线视频| 免费在线观看视频a| 国产第一页在线| 亚洲永久精品大片| 黄色a级片免费看| 亚洲h片在线看| 亚洲综合激情另类小说区| 国产激情片在线观看| 黄色网址在线免费| 亚洲美女视频在线| 亚洲精品一区二区毛豆| 超碰在线国产| 国产日产精品一区| 香蕉久久夜色| 视频免费一区| 亚洲人午夜精品天堂一二香蕉| 亚洲一卡二卡| 成人av免费| 一区二区三区欧美在线观看| 2019日韩中文字幕mv| 91九色美女在线视频| 黑人巨大精品欧美一区免费视频| 男人添女人下面高潮视频| 天堂√中文最新版在线| 欧美视频在线看| 色婷婷狠狠18| 电影91久久久| 亚洲国产欧美在线成人app| 一本色道综合久久欧美日韩精品| 久草成人在线| 久久在线精品视频| 久久久久久福利| 国产欧美91| 国产在线久久久| 超碰人人人人人人| 91蝌蚪porny成人天涯| 婷婷久久伊人| 日本乱理伦在线| 疯狂欧美牲乱大交777| 三年中国国语在线播放免费| 国产精品一区二区三区av| 精品国产免费人成电影在线观看四季| 91玉足脚交白嫩脚丫| 色婷婷一区二区三区| 久操成人在线视频| 99久久久无码国产精品免费蜜柚| 极品少妇xxxx精品少妇偷拍| 国产精品日韩高清| аⅴ资源新版在线天堂| 一区二区三区四区亚洲| 国产黄色特级片| 午夜精品在线| 亚洲人成亚洲人成在线观看| www.99re7| 久久亚洲国产精品一区二区| 91色视频在线观看| 精品美女视频在线观看免费软件| ●精品国产综合乱码久久久久| 五十路熟女丰满大屁股| 国语自产精品视频在线看抢先版结局| 日韩免费成人网| 国产精品成人在线视频| 91久久黄色| 成人国产在线视频| 青青草免费在线视频| 一区二区高清视频在线观看| 韩国日本美国免费毛片| 国产精品qvod| 久久福利网址导航| 手机av免费观看| 91在线视频播放地址| 可以在线看黄的网站| 日本少妇一区| 亚洲精品狠狠操| 久艹视频在线观看| 久草在线在线精品观看| 欧美亚洲另类在线一区二区三区| 青春草免费在线视频| 欧美精品亚洲一区二区在线播放| 大又大又粗又硬又爽少妇毛片 | 久久久精品中文字幕麻豆发布| 无码人妻aⅴ一区二区三区日本| 日本在线精品| 亚洲女人被黑人巨大进入al| av资源吧首页| 国产激情精品久久久第一区二区 | 欧美不卡在线| 91在线视频导航| 三区四区在线视频| 色狠狠桃花综合| 国产全是老熟女太爽了| 一区二区高清| 国产欧美一区二区三区不卡高清| a免费在线观看| 91精品国产91久久综合桃花| 欧美a级片免费看| 久久激情综合网| 亚洲国产午夜伦理片大全在线观看网站 | 久久综合九色综合97婷婷女人| 嫩草影院中文字幕| 亚洲精品黑牛一区二区三区| 不卡av电影院| 黄色录像特级片| 成人乱码一区二区三区av| 国产不卡在线观看| 熟妇人妻一区二区三区四区| 亚洲午夜精品网| 久久久久久久人妻无码中文字幕爆| 91精品国产乱码久久久久久| 成人国产精品久久久| 黄色网页在线免费看| 欧美一区二区三区视频在线观看| 乱h高h女3p含苞待放| 国产一二精品视频| www.亚洲视频.com| 欧美在线关看| 国产精品aaaa| 欧美极品视频| 日韩欧美色综合| 国产精品黄色大片| 国产婷婷一区二区| 中文字幕久久av| 中文字幕av亚洲精品一部二部| **亚洲第一综合导航网站| 青草影视电视剧免费播放在线观看| 精品美女一区二区三区| 亚洲黄色激情视频| 欧美国产日韩亚洲一区| 国产成年人视频网站| 欧美精品日本| 欧美尤物一区| 国产麻豆一区二区三区| 韩国精品美女www爽爽爽视频| 日本福利在线观看| 欧美日本在线观看| 国产大片中文字幕| 国产人成亚洲第一网站在线播放| 久久久精品高清| 一区二区亚洲精品| 欧美一二三区| 国产aa精品| 欧美中文在线观看| 国精产品一区| 亚洲精品在线视频| 国产区精品在线| 欧美日韩一区二区在线| 国产美女高潮视频| 91在线视频观看| 九九九久久久久久久| 亚洲免费网站| 九一免费在线观看| 欧美伦理影院| 国产精品日本一区二区| 欧美一区二区三区婷婷| 97超级碰在线看视频免费在线看 | 日韩人妻精品中文字幕| 亚洲欧美日韩国产综合| 亚洲国产无码精品| 成人一区二区三区视频在线观看| 亚洲一区二区蜜桃| 亚洲国产mv| 国产一二三四五| 欧美日韩国产传媒| 久久天天狠狠| 91成人短视频| 成人免费视频网址| 亚洲伦理影院| 2019亚洲男人天堂| 日皮视频在线观看| 久久深夜福利免费观看| 国产精品毛片一区二区三区四区| 亚洲国产欧美在线成人app | 亚洲二区中文字幕| 国产深喉视频一区二区| 欧美偷拍一区二区| 久久久久99精品成人片我成大片| 亚洲精品欧美激情| 日韩激情小视频| 欧美激情综合五月色丁香 | 鲁大师精品99久久久| 亚洲a区在线视频| 男人亚洲天堂| 国产精品久久久久久久av大片| 美女的胸无遮挡在线观看 | 日韩网站中文字幕| 欧洲美女7788成人免费视频| h片在线观看视频免费| 九九热精品视频| 中文字幕资源网在线观看| 日韩中文字幕在线看| 2019中文字幕在线视频| 亚洲亚裔videos黑人hd| 国产视频三级在线观看播放| 亚洲欧洲在线免费| 免费播放片a高清在线观看| 日韩的一区二区| 亚洲欧洲精品视频| 亚洲精品永久免费精品| 欧洲亚洲精品视频| 亚洲三级免费看| 九色在线免费| 中文字幕综合一区| 亚洲欧美视频一区二区| 久久国产一区二区三区| 超碰免费在线播放| 九九精品在线播放| а√在线中文在线新版| 欧美在线视频观看| 欧美日韩五区| 成人精品视频在线| 亚洲精品国产九九九| 国产日韩一区二区| 日本中文字幕在线一区| 欧美日韩精品免费在线观看视频| 欧美日韩爱爱| 永久久久久久| 韩国自拍一区| heyzo国产| 蜜臀久久99精品久久久久宅男| 美女在线视频一区二区| 国产一区二区成人久久免费影院| 日本黄色大片在线观看| 91尤物视频在线观看| 免费网站在线高清观看| 国产精品传媒视频| 免费网站观看www在线观| 精品久久久视频| 亚洲天堂自拍偷拍| 精品国产乱码久久久久久影片| 日韩专区第一页| 在线成人一区二区| av在线免费网站| 91高清免费视频| 日本精品久久| 国产精品区一区| 成人羞羞动漫| av在线com| 日本伊人精品一区二区三区观看方式| 亚洲娇小娇小娇小| 成人午夜免费电影| 国产真人做爰视频免费| 玉足女爽爽91| 久久久久久无码精品大片| 4438亚洲最大| 你懂的在线视频| 毛片精品免费在线观看| 六月婷婷综合| 99久久精品无码一区二区毛片| 蜜桃视频欧美| 国产高清不卡无码视频| 久久久夜夜夜| 成人免费看片载| 中文一区一区三区高中清不卡| 久久免费在线观看视频| 欧美色电影在线| 天天干天天草天天射| 久久精品国产v日韩v亚洲| 中文字幕乱码在线播放| 4444kk亚洲人成电影在线| 国产99亚洲| 国产www免费| 久久99久久99精品免视看婷婷 | 一区二区三区中文在线| 亚洲 小说区 图片区| 亚洲国产精品女人久久久| 免费av在线| 国产精品福利在线观看| 久久婷婷国产| 国产精品8888| 精品亚洲aⅴ乱码一区二区三区| 成人免费av片| 亚洲国产日韩a在线播放性色| 国产一区二区网站| 亚洲天堂男人的天堂| 老司机深夜福利在线观看| 国产精品久久久久久久久婷婷| 国产精品成久久久久| 国产精品亚洲二区在线观看 | 国产女主播一区二区三区| 婷婷综合激情| 黄色一级片免费的| 国产精品久久久爽爽爽麻豆色哟哟| 日韩在线播放中文字幕| 亚洲精品自拍偷拍| 成av人片在线观看www| 国产精品国产三级欧美二区| 午夜天堂精品久久久久| 欧美精品 - 色网| 亚洲美女偷拍久久| 国产黄色一级大片| 欧美二区乱c黑人| 精品国产乱码一区二区三区| 国产免费一区二区三区四在线播放| 日本最新不卡在线| 中文字幕欧美激情极品| 欧美午夜片在线看| 最新av网站在线观看| 国产精品视频公开费视频| 精品久久精品| 亚洲欧美国产日韩综合| 国产精品全国免费观看高清| 亚洲天堂狠狠干| 中国china体内裑精亚洲片| 日韩制服诱惑| 亚洲欧美日韩精品综合在线观看| 青娱乐精品视频在线| 国产精品综合激情| 欧美久久久久久久久| 亚洲性图自拍| 国产伦精品一区| 性欧美长视频| 国产99在线 | 亚洲| 4438成人网| 爱啪视频在线观看视频免费| 久久本道综合色狠狠五月| 美女被久久久| 国产精品久久国产精麻豆96堂| 欧美高清视频一二三区 | 国产成人精品免费久久久久| 欧美日韩中字| 日韩av福利在线观看| 亚洲国产综合色| 欧美亚洲日本| 国产在线98福利播放视频| 欧美精品偷拍| 亚洲av无码一区二区二三区| 欧美私人免费视频| 91中文在线| 欧美极品色图| 国产原创一区二区三区| 中日韩精品视频在线观看| 亚洲男人天堂视频| 99综合久久| 缅甸午夜性猛交xxxx| 国产欧美精品国产国产专区| a级片在线免费看| 欧美中文字幕在线观看| 91久久电影| 波多野结衣先锋影音| 欧美日韩国产经典色站一区二区三区 | 免费成人蒂法| 中文字幕免费高清在线| 亚洲国产精品久久人人爱| 国产98在线| 国产精品免费在线播放| 美女精品自拍一二三四| 久久综合色综合| 中文字幕免费国产精品| a看欧美黄色女同性恋| 91热这里只有精品| 亚洲国产精品一区二区久久| 91在线不卡| 久久精品午夜一区二区福利| 国产在线精品一区二区| 337p粉嫩色噜噜噜大肥臀| 欧美激情一级二级|