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

大數據分析工程師入門4-SQL進階

大數據 數據分析
數據分析工作中,免不了與SQL數據庫打交道,尤其是對庫表的使用,所以如何對庫表進行創建、修改和刪除,是一項基礎技能。本文主要講講數據分析工作中可能會用到的SQL進階知識點。

 

數據分析工作中,免不了與SQL數據庫打交道,尤其是對庫表的使用,所以如何對庫表進行創建、修改和刪除,是一項基礎技能。

 

DDL(DataDefinition Language的簡寫形式)是SQL語言集中負責數據結構定義與數據庫對象定義的語言,由CREATE、ALTER與DROP三個語法所組成。

 

接下來分為庫、表兩部分給出示例代碼供讀者學習了解。

 

  • 庫相關操作
  1. # 創建數據庫  
  2. CREATE DATABASE testdatabase;  
  3. # 選擇數據庫  
  4. USE testdatabase;  
  5. # 刪除數據庫  
  6. DROP DATABASE testdatabase;  
  7. # 列出已有數據庫  
  8. SHOW DATABASES;  

以上操作語句如果是在命令行中執行,需注意要以分號結束。

 

CREATE DATABASE關鍵字后面的testdatabase就是新創建的庫名,庫名需要是唯一的,也就意味著不能和已經存在的庫重名。USE testdatabase命令的作用就是切換到testdatabase庫下進行后續操作。SHOW DATABASES會列出所有當前用戶能訪問到的數據庫庫名。

 

  • 表相關操作

 

  1. # 創建表 
  2. CREATE TABLE test1 ( 
  3.     id INT unsigned NOT NULL AUTO_INCREMENT, 
  4.     name VARCHAR(225), 
  5.     price DECIMAL(10,2), 
  6.     PRIMARY KEY (id) 
  7. ) ENGINE=InnoDB DEFAULT CHARSET=utf8; 
  8. # 刪除表 
  9. DROP TABLE test1; 
  10. # 修改表字段類型 
  11. ALTER TABLE test1 MODIFY name VARCHAR(100); 
  12. # 添加表字段 
  13. ALTER TABLE test1 ADD COLUMN age INT(3) FIRST
  14. # 刪除表字段 
  15. ALTER TABLE test1 DROP age; 
  16. # 修改表字段名稱 
  17. ALTER TABLE test1 CHANGE age age2 INT(20); 
  18. # 表重命名 
  19. ALTER TABLE test1 RENAME test2; 
  20. # 查看表結構 
  21. DESC test2; 

同樣,以上操作語句如果是在命令行中執行,需注意要以分號結束。

 

CREATE TABLE 的時候,要求新指定的表名必須不存在,否則會出錯,這主要是為了防止意外覆蓋已有的表。

 

ALTER TABLE后面給出的要更改信息的表名必須存在,否則將報錯。使用ALTERTABLE要極為小心,應該在進行改動前做完整的備份(表結構和數據的備份),增加列會對數據存儲造成影響,因此要盡量避免此類操作。

 

類似地,如果刪除了不應該刪除的列,可能會丟失該列中的所有數據。刪除表操作同樣無法撤銷,所以執行該操作之前需十分謹慎小心

 

另外和大家分享下,工作中常用的建表小技巧

 

1. 創建表時,盡量使用一個自增的整型字段做主鍵。這樣做,如果后續需要使用spark等框架分析這個表時,是非常方便的。

 

2. 創建表時,可以增加兩個字段create_time和update_time。create_time存儲記錄的創建時間,update_time存儲記錄的最后一次變更時間,方便后續排查數據的變更情況。如果是使用MySQL,需要5.7及以上版本,具體語法示例如下:

  1. CREATE TABLE test1 ( 
  2.     id INT  unsigned NOT NULL AUTO_INCREMENT, 
  3.     name VARCHAR(225), 
  4.     price DECIMAL(10,2), 
  5.     create_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP
  6.     update_time TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
  7.     PRIMARY KEY (id) 
  8. ) ENGINE=InnoDB DEFAULT CHARSET=utf8; 

3. 可以考慮增加一個邏輯刪除列,存儲記錄的生效狀態。這樣在刪除數據時,可以進行邏輯刪除,即把狀態為改為失效,而不是真的把數據刪掉。

MySQL索引的建立對于MySQL的高效運行是很重要的,索引可以大大提高MySQL的檢索速度。主要分為兩種類型,單列索引和組合索引。

 

接下來,我們一起來看下如何創建不同類型的索引:

 

  • 建表時創建

語法:

  1. CREATE TABLE 表名( 
  2. 字段名 數據類型 [完整性約束條件], 
  3.        ……, 
  4. [UNIQUE | FULLTEXT | SPATIAL] INDEX | KEY 
  5. [索引名](字段名1 [(長度)] [ASC | DESC]) [USING 索引方法] 
  6. ); 
  7.   
  8. 說明: 
  9. UNIQUE:可選。表示索引為唯一性索引。 
  10. FULLTEXT:可選。表示索引為全文索引。 
  11. SPATIAL:可選。表示索引為空間索引。 
  12. INDEXKEY:用于指定字段為索引,兩者作用是一樣的。 
  13. 索引名:可選。給創建的索引取一個新名稱。 
  14. 字段名1:指定索引對應的字段的名稱,該字段必須是前面定義好的字段。 
  15. 長度:可選。指索引的長度,必須是字符串類型才可以使用。 
  16. ASC:可選。表示升序排列。 
  17. DESC:可選。表示降序排列。 
  18.   
  19. BTree是最常見的索引方法,所有值(被索引的列)都是排過序的,每個葉節點到根節點距離相等。所以BTree適合用來查找某一范圍內的數據,而且可以直接支持數據排序(ORDER BY)。還有其他幾種索引方法,讀者可自行百度了解一下。 

建表時創建單列索引和組合索引示例:

  1. CREATE TABLE classInfo( 
  2.     id INT AUTO_INCREMENT COMMENT 'id'
  3.     classname VARCHAR(128) COMMENT '課程名稱'
  4.     classid INT COMMENT '課程id'
  5.     classtype VARCHAR(128) COMMENT '課程類型'
  6.     classcode VARCHAR(128) COMMENT '課程代碼'
  7. -- 主鍵本身也是一種索引 
  8.     PRIMARY KEY (id), 
  9. -- 給classid字段創建了唯一索引(注:也可以在上面創建字段時使用unique來創建唯一索引) 
  10.     UNIQUE INDEX (classid), 
  11. -- 給classname字段創建普通索引 
  12.     INDEX (classname), 
  13. -- 創建組合索引 
  14.     INDEX (classtype,classcode) 
  15. -- 指定使用INNODB存儲引擎(該引擎支持事務)、utf8字符編碼 
  16. ) ENGINE = INNODB DEFAULT CHARSET = utf8 COMMENT '課程明細表'
  • 建表后創建

語法:

  1. ALTER TABLE 表名 ADD [UNIQUE| FULLTEXT | SPATIAL]  INDEX | KEY  [索引名] (字段名1 [(長度)] [ASC | DESC]) [USING 索引方法]; 
  2. 或 
  3. CREATE  [UNIQUE | FULLTEXT | SPATIAL] INDEX  索引名 ON  表名(字段名) [USING 索引方法] 

建表后創建單列索引和組合索引示例:

  1. --將id列設置為主鍵 
  2. ALTER TABLE classInfo ADD PRIMARY KEY(id) ; 
  3. --給classInfo表中的classid創建唯一索引 
  4. ALTER TABLE classInfo ADD UNIQUE INDEX (classid); 
  5. --給classInfo表中的classname創建普通索引 
  6. ALTER TABLE classInfo ADD INDEX (classname); 
  7. --給classInfo表中的classtype和classcode創建組合索引 
  8. ALTER TABLE classInfo ADD INDEX (classtype,classcode); 

索引建立以后,來看下如何對索引進行查看和刪除操作。

 

查看:

  1. show index from classInfo; 

結果:

刪除:

  1. DROP INDEX 索引名 ON 表名 
  2. 或 
  3. ALTER TABLE 表名 DROPINDEX 索引名 

示例:

  1. drop index classname on classInfo; 
  2. alter table classInfo drop index classid; 

索引的優點:

 

  1. 大大加快數據的查詢速度
  2. 使用索引字段分組和排序進行數據查詢時,可以顯著減少查詢時分組和排序的時間
  3. 創建唯一索引,能夠保證數據庫表中每一行數據的唯一性
  4. 在實現數據的參考完整性方面,可以加速表和表之間的連接

索引的缺點:

 

  1. 創建索引和維護索引需要消耗時間,并且隨著數據量的增加,時間也會增加
  2. 索引需要占據磁盤空間
  3. 對數據表中的數據進行增加,修改,刪除時,索引也要動態的維護,降低了維護的速度

創建索引的原則:

 

  1. 更新頻繁的列不應設置索引
  2. 數據量小的表不要使用索引(畢竟總共2頁的文檔,還要目錄嗎?)
  3. 重復數據多的字段不應設為索引(比如性別,只有男和女,一般來說:重復的數據超過百分之十五就不適合建索引)
  4. 首先應該考慮對where 和 order by 使用的列上建立索引

如果一個SQL執行緩慢,遠低于預期,我們該怎么去優化它呢?

 

關于這個問題,MySQL提供了一個explain命令,它可以對select語句進行分析,并輸出SQL執行的詳細過程和細節信息,以供開發人員進行針對性的優化。

 

explain的語法很簡單,首先我們通過一個簡單的sql查詢來了解一下:

  1. explain select * from user_info where id = 2 

其返回結果如下:

返回的每一個字段代表什么意思呢?

 

簡單總結一下:

  1. id: SELECT 查詢的標識符. 每個 SELECT 都會自動分配一個唯一的標識符. 
  2. select_type: SELECT 查詢的類型. 
  3. table: 查詢的是哪個表. 
  4. type: 訪問類型. 
  5. possible_keys: 此次查詢中可能選用的索引. 
  6. key: 此次查詢中確切使用到的索引,如果沒有選擇索引,鍵是NULL
  7. key_len:表示查詢優化器使用了索引的字節數. 這個字段可以評估組合索引是否完全被使用, 或只有最左部分字段被使用到,如果鍵是NULL,則長度為NULL。 
  8. ref: 哪個字段或常數與key一起被使用. 
  9. rows: 顯示此查詢一共掃描了多少行. 這個是一個估計值. 
  10. extra: 額外的信息. 

以上各個字段中,我們來重點講解下select_type、type和extra,其他字段通過以上注釋相信大家已經基本能夠理解其含義了。

 

  • select_type

表示查詢的類型,它的常用取值有:

 

(1)SIMPLE,表示此查詢不包含 UNION 查詢或子查詢。示例見上文。

 

(2)PRIMARY,表示此查詢是最外層的查詢;

DEPENDENT UNION,子查詢UNION語句的第二個或后面的SELECT,取決于外面的查詢, 即子查詢依賴于外層查詢的結果;

DEPENDENT SUBQUERY,子查詢中的第一個 SELECT,取決于外面的查詢,即子查詢依賴于外層查詢的結果;

UNION RESULT, UNION 語句的結果集;

 

示例代碼如下,相同顏色標示sql語句與select_type值的相對應。

(3)UNION, 表示此查詢是使用UNION語句的第二個或后面的SELECT

(4)SUBQUERY, 子查詢中的第一個 SELECT

那么DEPENDENT UNION和UNION, DEPENDENT SUBQUERY與SUBQUERY之間有什么區別呢?

 

顧名思義,關鍵點就在于DEPENDENT了,它的作用在于標示子查詢依賴于外層查詢的結果。

 

在以上第(2)點示例中,內部“student_info.user_id=user_info.id” 與“order_info.user_id=user_info.id”條件會自動添加到UNION所使用的SELECT查詢的WHERE條件,然后再執行。

 

由于外部定義的user_info數據表的id數據列要在子查詢中使用,所以DEPENDENT UNION和DEPENDENT SUBQUERY關鍵字出現在select_type中。

 

  • type

type表示的是訪問類型,以上示例中,已經出現了幾種type,接下來將常見type值及含義匯總一下:

類型

說明

All

最壞的情況,全表掃描

index

和全表掃描一樣。只是掃描表的時候按照索引次序進行而不是行。主要優點就是避免了排序, 但是開銷仍然非常大。如在Extra列看到Using index,說明正在使用覆蓋索引,只掃描索引的數據,它比按索引次序全表掃描的開銷要小很多。

range

表示使用索引范圍查詢, 通過索引字段范圍獲取表中部分數據記錄. 這個類型通常出現在 =, <>, >, >=, <, <=, IS NULL, <=>, BETWEEN, IN() 操作中。

ref

一種索引訪問,它返回所有匹配某個單個值的行。此類索引訪問只有當使用非唯一性索引或唯一性索引非唯一性前綴時才會發生。這個類型跟eq_ref不同的是,它用在關聯操作只使用了索引的最左前綴,或者索引不是UNIQUE和PRIMARY KEY。ref可以用于使用=或<=>操作符的帶索引的列。

eq_ref

最多只返回一條符合條件的記錄。此類型通常出現在多表的 join 查詢, 表示對于前表的每一個結果, 都只能匹配到后表的一行結果. 并且查詢的比較操作通常是 =, 查詢效率較高

const

當確定最多只會有一行匹配的時候,MySQL優化器會在查詢前讀取它而且只讀取一次,因此非常快。當主鍵放入where子句時,mysql把這個查詢轉為一個常量(高效)

system

這是const連接類型的一種特例,表僅有一行滿足條件。

Null

意味說mysql能在優化階段分解查詢語句,在執行階段甚至用不到訪問表或索引(高效)

Null >system > const > eq_ref > ref > range > index > ALL ,一般來說,得保證查詢至少達到range級別,最好能達到ref。結果值從好到壞依次是:

 

 

  • extra

EXPLAIN 中的很多額外的信息會在 Extra 字段顯示, 常見的是以下四種:

類型

說明

Using filesort

當 Extra 中有 Using filesort 時, 表示 MySQL 需額外的排序操作, 不能通過索引順序達到排序效果. 一般有 Using filesort, 建議進行代碼優化, 因為這樣的查詢 CPU 資源消耗大。

Using index

"覆蓋索引掃描", 表示查詢在索引樹中就可查找所需數據, 不用掃描表數據文件。

Using temporary

查詢有使用臨時表, 一般出現于排序, 分組和多表 join 的情況, 查詢效率不高, 建議優化。

Using where

這說明服務器在存儲引擎收到行后將進行過濾。有些where中的條件會有屬于索引的列,當它讀取使用索引的時候,就會被過濾,所以會出現有些where語句并沒有在extra列中出現using where這么一個說明。

本章節之前給出的示例中,有出現Using index和Using where,關于另外兩種的使用示例讀者感興趣的話可上網百度了解一下,這里就不再繼續舉例說明了。

 

能夠看懂explain的輸出,是對SQL或表結構進行優化的前提。所以,大家需要首先看懂并理解explain輸出內容所包含的信息,進而優化實現更加高效的查詢。

主從同步,簡單來說就是將一個服務器上的數據同步到另一個服務器上。

 

數據所在的服務器被稱為主服務器(Master),接受數據拷貝的服務器被稱為從服務器(Slave)。

 

主從同步主要有以下好處:

 

  1. 數據備份:主服務器上的數據出現問題后,可通過從服務器數據進行恢復;
  2. 提高主服務器的性能:在主服務器上生成實時數據,而在從服務器上分析這些數據;
  3. 提高整個數據庫服務的性能:在主服務器上執行寫入和更新,在從服務器上向外提供讀功能,可以動態地調整從服務器的數量,從而提升整個數據庫的性能;

為什么要單獨強調一下mysql的主從同步機制,那是因為在實際數據分析工作中,當我們通過hive、spark等分布式框架去訪問mysql數據庫的時候,此時的分布式讀取會對服務器產生很大的壓力,如果直接讀取主庫的話,極可能會導致正在運行的主庫線上任務暫停幾分鐘,進而對線上業務造成不良影響。

 

所以,一般建議盡量通過從庫進行數據讀取,避免對線上服務造成損害。

 

由于主從同步相關操作平時都是運維或者DBA他們在維護,作為數據分析人員很少會需要直接實現這些,所以這里對如何實現主從同步等相關知識點就不展開細講,感興趣的小伙伴,可參考一下鏈接,了解一下。

 

https://blog.csdn.net/qq_15092079/article/details/81672920

 

上面提到主從同步是一種實時的數據備份方案,通常我們還會定時去對數據庫做數據備份。

 

其目的,是為了防止執行一些災難性操作后,數據仍然可以恢復。

 

比如說,刪庫刪表。這是因為主從同步,通常是采用同步操作語句的方式,進行庫表結構和數據拷貝的。因此,如果主庫執行刪除數據庫或表的操作,從庫也會同步刪除。如果有定時備份的數據文件,出現這種情況,只需要把數據反向導入到數據庫中,就可以恢復。

 

mysql提供的數據備份的命令為mysqldump,通常是由DBA或者運維來進行備份操作,大家只需要知道這個知識點即可,方面平時溝通交流。

 

另外大家要有備份的意識,備份操作是十分必要的,相當于后悔藥。在筆者的公司,就發生過幾次數據誤刪的問題,都是通過備份完成恢復的。

show [full] processlist 能顯示用戶正在運行的線程,這在數據分析工作中對于協助故障診斷非常有幫助。

 

full關鍵字,可以不寫,如果加上后,會把正在執行的SQL語句完整打印出來。

 

我們來直接執行一下看看能返回哪些信息:

結果中的每個字段含義總結如下:

字段

說明

Id

就是這個線程的唯一標識,當我們發現這個線程有問題的時候,可以通過 kill 命令,加上這個Id值將這個線程殺掉.

User

該線程的所屬用戶.

Host

記錄了發送請求的客戶端的 IP 和 端口號.

db

當前執行的命令是在哪一個數據庫上。如果沒有指定數據庫,則該值為 NULL.

Command

是指此刻該線程正在執行的命令.

Time

表示該線程處于當前狀態的時間.

State

線程的狀態.

Info

一般記錄的是線程執行的語句。默認只顯示前100個字符,也就是你看到的語句可能是截斷了的,要看全部信息,需要使用 show full processlist.

有一種情況,需要大家重點注意下,就是Command中出現Waiting for ... lock字眼時,表示有語句把庫或表給鎖住了。

 

通常這個時候,相關的操作庫或表的程序就會處于假死狀態,表現為程序卡住不動。這時就需要聯系DBA或運維看下是什么原因導致鎖庫或鎖表。所以,在你排查程序假死的問題時,如果程序有使用數據庫,可以考慮是不是這個因素導致的。

 

注:show processlist 顯示的信息都是來自MySQL系統庫 information_schema 中的 processlist 表。所以使用下面的查詢語句可以獲得相同的結果:

  1. select * from information_schema.processlist 

數據分析工作中的常用操作:

 

1.按客戶端 IP 分組,看哪個客戶端的鏈接數最多

  1. select client_ip,count(client_ip) as client_num  
  2. from ( 
  3.      selectsubstring_index(host,':' ,1) as client_ip  
  4.      fromprocesslist ) as connect_info  
  5. group by client_ip  
  6. order by client_num desc

2.查看正在執行的線程,并按 Time 倒排序,看看有沒有執行時間特別長的線程

  1. select *  
  2. from information_schema.processlist  
  3. where Command != 'Sleep'  
  4. order by Time desc

3.找出所有執行時間超過 5 分鐘的線程,拼湊出 kill 語句,方便后面查殺

  1. select concat('kill ', id, ';'
  2. from information_schema.processlist  
  3. where Command != 'Sleep' and Time > 300 
  4. order by Time desc

MySQL默認設置下,一個連接最長等待時間為8小時,如果8小時都處于空閑狀態,就會出現連接超時問題,在使用MySQL時相信大家或多或少都會遇到這種狀況,這里跟大家分享下在遇到這種情況時,通常采取的措施和解決辦法。

 

首先,查看問題,看下wait_timeout的取值。

 

打開MySQL的控制臺,運行showvariables like '%timeout%',查看和連接時間有關的MySQL系統變量。

 

然后,解決問題,解決方式常用的有三種。

 

1. 增加 MySQL 的 wait_timeout 屬性的值

  1. //修改mysql配置文件,重啟后生效 
  2. wait_timeout = 31536000 
  3. or  
  4. //通過mysql命令修改 
  5. mysql> set wait_timeout= 31536000; 

2. 減少連接池內連接的生存周期

 

通過代碼配置,讓線程在mysql提示超時前回收,并重新連接。以下舉例為c3p0連接池的配置,其他連接池(如Druid、Dbcp)原理類似。

 

修改 c3p0 的配置文件,在 Spring 的配置文件中設置:

  1. <beanid="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource">       
  2.     <property name="maxIdleTime"value="1800"/>   
  3.     <!--other properties -->   
  4.  </bean> 

3. 定期使用連接池內的連接

 

定期使用連接池內的連接,使得它們不會因為閑置超時而被 MySQL 斷開。

 

修改 c3p0 的配置文件,在 Spring的配置文件中設置:

  1. <beanid="dataSource"class="com.mchange.v2.c3p0.ComboPooledDataSource">   
  2.     <propertyname="preferredTestQuery" value="SELECT 1"/>   
  3.     <propertyname="idleConnectionTestPeriod" value="18000"/>   
  4.     <propertyname="testConnectionOnCheckout" value="true"/>   
  5. </bean> 

普通語言里的布爾型只有 true 和 false 兩個值,這種邏輯體系被稱為二值邏輯。而 SQL 語言里,除此之外還有第三個值NULL,因此這種邏輯體系被稱為三值邏輯。

 

本章節對于NULL值這部分的講解重點在于提醒大家對NULL 使用比較謂詞后得到的結果總是 NULL 。

 

這是因為,NULL 既不是值也不是變量。NULL 只是一個表示“沒有值”的標記,而比較謂詞只適用于值。因此,對并非值的 NULL 使用比較謂詞本來就是沒有意義的。比如如下幾種比較,返回的結果均是NULL 。

  1. 1 = NULL 
  2. 2 > NULL 
  3. 3 < NULL 
  4. 4 <> NULL 
  5. NULL = NULL 

所以,當SQL語句的where條件里有一個字段(比如age)有NULL值,用該字段用于謂詞比較判斷的時候,比如 age <> 30,表面上理解起來age字段中的NULL值跟30不等,那這個where條件返回的應該是true,從而age字段為NULL的記錄應該會被保留下來,實際上不是的,它們比較后返回的結果是NULL ,age字段為NULL的記錄會被過濾掉。

 

因此,要想留下NULL值,正確的寫法為,age <> 30 or age is null。在沒有學到這個知識點之前,這樣進行數據過濾容易導致提取出來的數據結果與預期有偏差。

作為上一篇sql基礎的補充,結合實際工作經驗,給大家分享一下經常用到的更深層一點的sql技能,包括有DDL、索引、EXPLAIN、主從同步、數據備份、show processlist、wait_timeout和NULL值判斷,希望大家有所收獲哦!

 

責任編輯:梁菲 來源: 今日頭條
相關推薦

2021-03-09 09:53:03

大數據數據分析Hue

2020-01-17 13:33:42

大數據分析師大數據工程師

2018-08-19 15:39:56

數據分析數據科學數據工程師

2018-07-20 16:57:51

大數據書單工程師

2015-08-17 09:39:40

大數據

2013-01-05 02:11:39

工程師程序員

2013-05-06 09:14:26

BigQuery大數據分析大數據分析入門

2019-04-24 12:45:00

2023-12-26 08:40:06

分類算法數據分析Python

2017-11-09 14:12:44

大數據軟件工程師算法工程師

2018-11-08 15:12:16

數據分析算法決策樹

2012-08-07 17:32:25

數據分析師

2015-08-19 13:50:19

數據分析

2015-04-03 11:19:21

大數據大數據分析師

2015-08-14 10:28:09

大數據

2017-07-05 18:10:23

大數據分析思路心得

2019-10-10 17:40:54

數據科學可視化繪圖

2021-02-25 11:36:28

大數據Gartner

2015-08-11 15:52:52

大數據數據分析

2016-01-26 10:33:23

大數據分析工具數據分析師
點贊
收藏

51CTO技術棧公眾號

久久99在线观看| 国产欧美久久一区二区三区| 一区二区三区日韩| 国产精品日韩一区二区免费视频| 国产极品在线播放| 国产精品探花在线观看| 欧美绝品在线观看成人午夜影视| 国产青草视频在线观看| 欧美新色视频| 久久99精品网久久| 97av在线影院| 国产大屁股喷水视频在线观看| 无人区乱码一区二区三区| 偷拍日韩校园综合在线| 综合久久国产| 嫩草精品影院| 国产成人午夜99999| 日韩av片免费在线观看| 久久精品一区二区三| 国产精品一在线观看| 欧美一区二区二区| mm1313亚洲国产精品无码试看| 成年人网站在线| 久久综合成人精品亚洲另类欧美 | 少妇视频一区二区| 18国产精品| 欧美日韩一区国产| 欧美 日韩 国产 高清| 免费在线观看av片| 久久久久99精品国产片| 国产伦精品一区二区三| 国产欧美一区二区三区视频在线观看| 一区二区毛片| 欧美黄色片在线观看| 国精产品一区一区| 视频一区在线观看| 亚洲成人教育av| 一级片免费在线观看视频| www.国产精品| 色综合久久久久网| 成年人视频观看| 19禁羞羞电影院在线观看| 亚洲女厕所小便bbb| 亚洲欧洲国产日韩精品| 黄上黄在线观看| 91在线播放网址| 国产精品自拍首页| 免费观看国产视频| 懂色av中文一区二区三区| 成人免费福利在线| 91丨九色丨丰满| 奇米一区二区三区av| 国产99在线|中文| 性无码专区无码| 一区二区日本视频| 97视频在线看| 日韩三级小视频| 一本色道久久综合| 欧美亚洲日本黄色| 九九精品免费视频| 羞羞视频在线观看欧美| 国内精品小视频在线观看| 久久精品国产亚洲av麻豆色欲| 欧美精品99| 久久免费视频网| 国产无套粉嫩白浆内谢| 亚洲尤物在线| 国产精品mp4| 男操女视频网站| 美女视频黄久久| 成人亚洲欧美一区二区三区| 国产男女猛烈无遮挡| 国产在线不卡一卡二卡三卡四卡| 91嫩草视频在线观看| 亚洲国产精品18久久久久久| 成人深夜福利app| 麻豆91蜜桃| h视频在线观看免费| 中文字幕色av一区二区三区| 伊人再见免费在线观看高清版 | 午夜剧场高清版免费观看| 久久精品嫩草影院| 日韩亚洲欧美中文三级| 五月天激情小说| 深爱激情综合| 精品国产一区二区三区四区在线观看 | www.久久久久久.com| 欧美卡一卡二卡三| 久久久久久色| 成人做爰www免费看视频网站| 国产福利第一页| 99re这里只有精品首页| 色999五月色| 在线中文字幕视频观看| 欧美日韩国产精品一区二区不卡中文 | 免费网站免费进入在线| 亚洲一区二区三区四区中文字幕| 99爱视频在线| 粉嫩av国产一区二区三区| 亚洲第一综合天堂另类专 | 中文字幕在线不卡视频| 国产精品视频一二三四区| 超级碰碰久久| 欧美一区二区视频在线观看2020| 黄色av网址在线观看| 精品一区不卡| 97久久久免费福利网址| 97超视频在线观看| 91一区二区在线| 亚洲最新免费视频| 亚洲十八**毛片| 欧美一区二区三区在线看| 亚洲一区二区三区无码久久| 国产精品成人a在线观看| 欧美中文字幕精品| 国产三区在线播放| 国产女人aaa级久久久级| 日韩精品在线视频免费观看| 久久91超碰青草在哪里看| 亚洲第一国产精品| 黄色一级大片在线免费观看| 亚洲免费网址| 国产精品yjizz| 麻豆传媒视频在线观看免费| 一本一本大道香蕉久在线精品| 国产伦理在线观看| 午夜免费一区| 国产精品入口尤物| 你懂的视频在线免费| 亚洲午夜免费视频| 中文字幕55页| 99精品视频在线观看播放| 国产成人中文字幕| 无码精品人妻一区二区三区影院| 18成人在线观看| 亚洲老女人av| 国产传媒欧美日韩成人精品大片| 91精品国产91久久久久久久久| 国产欧美一区二区三区视频在线观看| 亚洲国产精品激情在线观看| 国产97色在线 | 日韩| 欧美高清视频看片在线观看| 欧美精品videos| 国产高中女学生第一次| 日韩毛片在线免费观看| 亚洲 国产 图片| 99精品美女| 91久久国产精品| 男人资源在线播放| 欧美精品久久99| 91n在线视频| 久久成人综合网| 特级毛片在线免费观看| 亚洲高清影院| 久久综合亚洲社区| 国产高潮流白浆喷水视频| 亚洲男人天堂av| 国产老头和老头xxxx×| 黄色日韩精品| 精品国产乱码久久久久久88av| 51精品在线| 日韩大陆毛片av| 日本视频网站在线观看| 久久综合九色综合欧美98| 国产成人a亚洲精v品无码| 免费一区二区三区视频导航| 日韩暖暖在线视频| 成人高清免费观看mv| 欧美三级视频在线观看 | 一区二区三区**美女毛片| 香蕉视频在线观看黄| 影音先锋日韩精品| 国产伦精品一区二区三区照片91| 国产美女高潮在线| 亚洲视频视频在线| 亚洲天堂avav| 一区二区三区中文字幕精品精品 | 中文av一区特黄| www.com久久久| 国产精品v亚洲精品v日韩精品| 国产日韩二区| 亚洲精品粉嫩美女一区| 久久综合网hezyo| 少妇高潮久久久| 在线观看精品一区| 成人免费视频网站入口::| jiyouzz国产精品久久| 国产又黄又猛视频| 国产精品毛片久久| 国内精品视频免费| 国产亚洲精彩久久| 欧美激情在线观看视频| 国产在线一二| 日韩欧美一区在线| 亚洲国产av一区二区三区| 亚洲欧美日韩国产成人精品影院| 91精品啪在线观看国产| 日本aⅴ亚洲精品中文乱码| 麻豆映画在线观看| 亚洲最大在线| 亚洲自拍偷拍区| 88xx成人免费观看视频库| 久久五月天综合| 日韩大胆人体| 欧美一区二区三区在线电影| 天堂中文在线网| 亚洲欧美日韩精品久久久久| 自拍偷拍中文字幕| 国产成人啪午夜精品网站男同| 国产精品无码一本二本三本色| 午夜日韩在线| 亚洲日本无吗高清不卡| 日韩有码中文字幕在线| 亚洲中国色老太| 亚洲成人高清| 国产精品高清免费在线观看| 丁香花高清在线观看完整版| 日韩一二三在线视频播| 四虎电影院在线观看| 欧美一级xxx| 伊人精品在线视频| 色综合久久中文综合久久97| 久久久久无码国产精品| 中文字幕在线一区| 欧美黄色激情视频| 91香蕉视频mp4| 中文字幕第九页| 国产精品1区2区3区| 亚洲妇熟xx妇色黄蜜桃| 七七婷婷婷婷精品国产| 国产无套内射久久久国产| 亚洲黄色精品| 免费视频爱爱太爽了| 你懂的视频一区二区| 亚洲图片都市激情| 青青草国产成人a∨下载安卓| 免费久久久一本精品久久区| 久久夜色电影| 国产精品我不卡| www.成人网| 成人av播放| 在线观看视频一区二区三区| 91亚洲精品久久久| www.成人| 成人免费激情视频| japansex久久高清精品| 91日韩在线播放| 国产精品亚洲欧美日韩一区在线 | 六月丁香久久丫| 国产精品久久精品国产| 久草在线综合| 久久99九九| 久久av超碰| 亚洲精品一区二区三区蜜桃久 | 成人av网站在线| 丰满少妇xbxb毛片日本| 粉嫩aⅴ一区二区三区四区| 国内精品免费视频| 99国产精品国产精品毛片| 最近中文字幕无免费| www国产精品av| 国产美女免费无遮挡| 国产欧美久久久精品影院| www中文在线| 国产婷婷一区二区| gv天堂gv无码男同在线观看| 自拍偷拍亚洲欧美日韩| 精品国产一区久久久| 国产黄色片免费看| 色一区在线观看| 中文字幕+乱码+中文乱码www| 欧美高清hd18日本| 国产av无码专区亚洲a∨毛片| 欧美白人最猛性xxxxx69交| 少妇喷水在线观看| 亚洲图片制服诱惑| 免费的黄网站在线观看| 久久91精品国产91久久跳| 碰碰在线视频| 国产精品999| 久久99成人| 久久涩涩网站| 欧美超碰在线| 日本欧美视频在线观看| 噜噜噜在线观看免费视频日韩| 在线观看岛国av| 国产999精品久久| 欧美18—19性高清hd4k| 亚洲色欲色欲www在线观看| 久久久美女视频| 91成人免费在线| 国产高清精品软件丝瓜软件| 日韩精品在线免费观看视频| 在线中文资源天堂| 欧美激情按摩在线| 久久久一本精品| 成人动漫在线视频| 精品国产欧美日韩| 日本天堂免费a| 日韩二区三区四区| 欧洲熟妇的性久久久久久| 国产日韩精品一区二区浪潮av| 一区二区成人免费视频| 色94色欧美sute亚洲线路一ni | 极品少妇xxxx精品少妇偷拍| 日本美女视频网站| 国产精品美女久久久久久久久久久 | 亚洲欧美中日韩| 中日韩精品视频在线观看| 欧美日韩一本到| 婷婷五月综合激情| 欧美成人第一页| 欧美三区四区| 精品国产乱码久久久久久108| 久久久久久久久丰满| 日韩 欧美 高清| 成人h动漫精品一区二区| 欧美性生交大片| 一本久道久久综合中文字幕| 性欧美videos另类hd| 日韩在线精品一区| 波多野结衣亚洲| 国偷自产av一区二区三区小尤奈| 91精品一区二区三区综合在线爱| 激情六月丁香婷婷| av在线免费不卡| 免费日韩在线视频| 国产在线观看91一区二区三区| 九九热精品视频国产| 3d性欧美动漫精品xxxx软件| 国产一区二区不卡视频在线观看| 忘忧草精品久久久久久久高清| 久久久精品麻豆| 久久久久成人黄色影片| 国产午夜免费福利 | 青梅竹马是消防员在线| 欧美精品久久久久a| 91精品国产自产精品男人的天堂| 大桥未久一区二区三区| 九一久久久久久| 国产麻豆a毛片| 欧美三级在线播放| 亚洲精品承认| 国产免费一区二区三区在线观看| 精品日本12videosex| 999精品网站| 日本一区二区三区久久久久久久久不 | 天天操天天色综合| 天天操天天射天天| 98精品在线视频| 日韩精品丝袜美腿| 欧美日韩激情视频在线观看| 91污片在线观看| 亚洲japanese制服美女| 91官网在线| 成人久久久久爱| 你懂的国产精品永久在线| 97人人模人人爽人人澡| 亚洲精品菠萝久久久久久久| 亚洲不卡免费视频| 韩剧1988在线观看免费完整版| 久久午夜影院| 日本一极黄色片| 国产精品久久久久久久岛一牛影视| 亚洲综合一区中| 久久国产精品免费视频| 91免费精品国偷自产在线在线| 国产综合中文字幕| 久久久久一区二区三区四区| av首页在线观看| 久久精品国产精品| 91综合精品国产丝袜长腿久久| 缅甸午夜性猛交xxxx| 久久蜜臀精品av| 亚洲综合精品国产一区二区三区 | 精品亚洲乱码一区二区| 8v天堂国产在线一区二区| 欧美人与动牲性行为| 久久人人九九| 麻豆成人av在线| 久久久国产精华液| 亚洲欧美在线第一页| 亚洲二区av| 激情伊人五月天| 国产精品丝袜一区| 亚洲精品成人电影| 热久久这里只有| 亚洲精品97| 免费看污黄网站在线观看| 欧美老年两性高潮| 九色porny丨国产首页在线| 先锋影音一区二区三区| 国产精品18久久久久| 免费在线观看黄网站| 最近2019中文字幕大全第二页| 日韩一二三区在线观看| av免费网站观看| 亚洲一区在线观看视频| 成人亚洲综合天堂| 国产嫩草一区二区三区在线观看|