日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > 数据库 >内容正文

数据库

mysql索引结构原理、性能分析与优化

發布時間:2023/12/13 数据库 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 mysql索引结构原理、性能分析与优化 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

摘要:

第一部分:基礎知識

第二部分:MYISAM和INNODB索引結構

1、簡單介紹B-tree B+ tree樹

2、MyisAM索引結構

3、Annode索引結構

4、MyisAM索引與InnoDB索引相比較

第三部分:MYSQL優化

1、表數據類型選擇

2、sql語句優化

(1) ? ? 最左前綴原則

(1.1) ?能正確的利用索引

(1.2) ?不能正確的利用索引

(1.3) ?如果一個查詢where子句中確實不需要password列,那就用“補洞”。

(1.4) ?like

(2) ? ? Order by 優化

(2.1)filesort優化算法.

(2.2)單獨order by 用不了索引,索引考慮加where 或加limit

(2.3)where + orerby 類型,where滿足最左前綴原則,且orderby的列和where子句用到的索引的列的子集。即是(a,b,c)索引,where滿足最左前綴原則且order by中列a、b、c的任意組合

(2.4) where + orerby+limit

(2.5)如何考慮order by來建索引

(3) ? ? 隔離列

(4) ? ? OR、IN、UNION ALL,可以嘗試用UNION ALL

(4.1)or會遍歷表就算有索引

(4.2)關于in

(4.2)UNION All

(5) ? ? 范索引選擇性

(6) ? ? 重復或多余索引

3、系統配置與維護優化

(1) ? ? 重要的一些變量

(2) ? ? Fdsoptimize、Analyze、check、repair維護操作

(3) ? ? 表結構的更新與維護

第四部分:圖說mysql查詢執行流程

?

?

?

第一部分:基礎知識:

索引

官方介紹索引是幫助MySQL高效獲取數據的數據結構。筆者理解索引相當于一本書的目錄,通過目錄就知道要的資料在哪里,不用一頁一頁查閱找出需要的資料。關鍵字index

-------------------------------------------------------------

唯一索引

強調唯一,就是索引值必須唯一,關鍵字unique index

創建索引:

1、create?unique index?索引名 on 表名(列名);

2、alter table 表名 add?unique index?索引名 (列名);

刪除索引:

1、 ?drop index 索引名 on 表名;

2、 ?alter table 表名 drop index 索引名;

-------------------------------------------------------------

主鍵

主鍵就是唯一索引的一種,主鍵要求建表時指定,一般用auto_increatment列,關鍵字是primary key

主鍵創建:

creat table test2 (id int not null?primary key?auto_increment);

-------------------------------------------------------------

全文索引

InnoDB不支持,Myisam支持性能比較好,一般在 CHAR、VARCHAR 或 TEXT 列上創建。

Create table 表名( id int not null primary anto_increment,title

varchar(100),FULLTEXT(title))type=myisam

------------------------------

單列索引與多列索引

索引可以是單列索引也可以是多列索引(也叫復合索引)。按照上面形式創建出來的索引是單列索引,現在先看看創建多列索引:

create table test3 (id int not null primary key auto_increment,uname char

(8) not null default '',password char(12) not null,INDEX(uname,password))type

=myisam;

注意:INDEX(a, b, c)可以當做a或(a, b)的索引來使用,但和b、c或(b,c)的索引來使用這是一個最左前綴的優化方法,在后面會有詳細的介紹,你只要知道有這樣兩個概念

-------------------------------------------------------------

聚集索引

一種索引,該索引中鍵值的邏輯順序決定了表中相應行的物理順序。聚集索引確定表中數據的物理順序。Mysql中myisam表是沒有聚集索引的,innodb有(主鍵就是聚集索引),聚集索引在下面介紹innodb結構的時有詳細介紹。

-------------------------------------------------------------

查看表的索引

通過命令:Show index from 表名

如:

  • mysql> show index from test3; ?

  • +-------+------------+----------+--------------+-------------+-----------+-------------+----------+--------+----+

  • | Table | Non_unique | Key_name | Seq_in_index | Column_name | Collation | Cardinality | Sub_part |

  • Packed | Null | Index_type | Comment | ?

  • +-------+------------+----------+--------------+-------------+-----------+-------------+----------+--------+----+

  • | test3 | ? ? ? ? ?0 | PRIMARY ?| ? ? ? ?1 ?| ? ?id ? ? ? ? ?| ? ? A ? ? | ? 0 ? ? ? ? ?| ? ? NULL |

  • NULL ? | ? ? | BTREE ? ? ?| ? ? ? ? | ?

  • +-------+------------+----------+--------------+-------------+-----------+-------------+----------+--------+------+

  • Table:表名

    Key_name:什么類型索引(這了是主鍵)

    Column_name:索引列的字段名

    Cardinality:索引基數,很關鍵的一個參數,平均數值組=索引基數/表總數據行,平均數值組越接近1就越有可能利用索引

    Index_type:如果索引是全文索引,則是fulltext,這里是b+tree索引,b+tre也是這篇文章研究的重點之一

    其他的就不詳細介紹,更多:

    第二部分:MYISAM和INNODB索引結構

    1、?簡單介紹B-tree B+ tree樹

    B-tree結構視圖

    一棵m階的B-tree樹,則有以下性質

    (1)Ki表示關鍵字值,上圖中,k1?<…?<該關鍵字值<右子節點關鍵字值)

    (2)Pi表示指向子節點的指針,左指針指向左子節點,右指針指向右子節點。即是:p1[指向值]

    (3)所有關鍵字必須唯一值(這也是創建myisam 和innodb表必須要主鍵的原因),每個節點包含一個說明該節點多少個關鍵字,如上圖第二行的i和n

    (4)節點:

    l ?每個節點最可以有m個子節點。

    l ?根節點若非葉子節點,至少2個子節點,最多m個子節點

    l ?每個非根,非葉子節點至少[m/2]子節點或叫子樹([]表示向上取整),最多m個子節點

    (5)關鍵字:

    l ?根節點的關鍵字個數1~m-1

    l ?非根非葉子節點的關鍵字個數[m/2]-1~m-1,如m=3,則該類節點關鍵字個數:2-1~2

    (6)關鍵字數k和指向子節點個數指針p的關系:

    l ?k+1=p ,注意根據儲存數據的具體需求,左右指針為空時要有標志位表示沒有

    ?B+tree結構示意圖如下:

    ?

    B+樹是B-樹的變體,也是一種多路搜索樹:

    l ?非葉子結點的子樹指針與關鍵字個數相同

    l ?為所有葉子結點增加一個鏈指針(紅點標志的箭頭)

    ?

    ?

    B+樹是B-樹的變體,也是一種多路搜索樹:

    l ?非葉子結點的子樹指針與關鍵字個數相同

    l ?為所有葉子結點增加一個鏈指針(紅點標志的箭頭)

    2、?MyisAM索引結構

    MyisAM索引用的B+tree來儲存數據,MyisAM索引的指針指向的是鍵值的地址,地址存儲的是數據,如下圖:

    (1)結構講解:上圖3階樹,主鍵是Col2,Col值就是改行數據保存的物理地址,其中紅色部分是說明標注。

    l ?1標注部分也許會迷惑,前面不是說關鍵字15右指針的指向鍵值要大于15,怎么下面還有15關鍵字?因為B+tree的所以葉子節點包含所有關鍵字且是按照升序排列(主鍵索引唯一,輔助索引可以不唯一),所以等于關鍵字的數據值在右子樹

    l ?2標注是相應關鍵字存儲對應數據的物理地址,注意這也是之后和InnoDB索引不同的地方之一

    l ?2標注也是一個所說MyiAM表的索引和數據是分離的,索引保存在”表名.MYI”文件內,而數據保存在“表名.MYD”文件內,2標注的物理地址就是“表名.MYD”文件內相應數據的物理地址。(InnoDB表的索引文件和數據文件在一起)

    l ?輔助索引和主鍵索引沒什么大的區別,輔助索引的索引值是可以重復的(但InnoDB輔助索引和主鍵索引有很明顯的區別,這里先提醒注意一下)

    3、?Annode索引結構

    (1)首先有一個表,內容和主鍵索引結構如下兩圖:

    Col1

    Col2

    Col3

    1

    15

    phpben

    2

    20

    mhycoe

    3

    23

    phpyu

    4

    25

    bearpa

    5

    40

    phpgoo

    6

    45

    phphao

    7

    48

    phpxue

    ……

    結構上:由上圖可以看出InnoDB的索引結構很MyisAM的有很明顯的區別

    l ?MyisAM表的索引和數據是分開的,用指針指向數據的物理地址,而InnoDB表中索引和數據是儲存在一起。看紅框1可一看出一行數據都保存了。

    l ?還有一個上圖多了三行的隱藏數據列(虛線表),這是因為MyisAM不支持事務,InnoDB處理事務在性能上并發控制上比較好,看圖中的紅框2中的DB_TRX_ID是事務ID,自動增長;db_roll_ptr是回滾指針,用于事務出錯時數據回滾恢復;db_row_id是記錄行號,這個值其實在主鍵索引中就是主鍵值,這里標出重復是為了容易介紹,還有的是若不是主鍵索引(輔助索引),db_row_id會找表中unique的列作為值,若沒有unique列則系統自動創建一個。關于InnoDB跟多事務MVCC點此:http://www.phpben.com/?post=72

    (2)加入上表中Col1是主鍵(下圖標錯),而Col2是輔助索引,則相應的輔助索引結構圖:

    ?

    可以看出InnoDB輔助索引并沒有保存相應的所有列數據,而是保存了主鍵的鍵值(圖中1、2、3….)這樣做利弊也是很明顯:

    l ?在已有主鍵索引,避免數據冗余,同時在修改數據的時候只需修改輔助索引值。

    l ?但輔助索引查找數據事要檢索兩次,先找到相應的主鍵索引值然后在去檢索主鍵索引找到對應的數據。這也是網上很多mysql性能優化時提到的“主鍵盡可能簡短”的原因,主鍵越長輔助索引也就越大,當然主鍵索引也越大。

    4、?MyisAM索引與InnoDB索引相比較

    l MyisAM支持全文索引(FULLTEXT)、壓縮索引,InnoDB不支持

    l AnnoDB支持事務,MyisAM不支持

    l MyisAM順序儲存數據,索引葉子節點保存對應數據行地址,輔助索引很主鍵索引相差無幾;AnnoDB主鍵節點同時保存數據行,其他輔助索引保存的是主鍵索引的值

    l MyisAM鍵值分離,索引載入內存(key_buffer_size),數據緩存依賴操作系統;InnoDB鍵值一起保存,索引與數據一起載入InnoDB緩沖池

    l MyisAM主鍵(唯一)索引按升序來存儲存儲,InnoDB則不一定

    l MyisAM索引的基數值(Cardinality,show index 命令可以看見)是精確的,InnoDB則是估計值。這里涉及到信息統計的知識,MyisAM統計信息是保存磁盤中,在alter表或Analyze table操作更新此信息,而InnoDB則是在表第一次打開的時候估計值保存在緩存區內

    l MyisAM處理字符串索引時用增量保存的方式,如第一個索引是‘preform’,第二個是‘preformence’,則第二個保存是‘7,ance‘,這個明顯的好處是縮短索引,但是缺陷就是不支持倒序提取索引,必須順序遍歷獲取索引

    ?

    ?

    第三部分:MYSQL優化

    mysql優化是一個重大課題之一,這里會重點詳細的介紹mysql優化,包括表數據類型選擇,sql語句優化,系統配置與維護優化三類。

    1、 ?表數據類型選擇

    (1)能小就用小。表數據類型第一個原則是:使用能正確的表示和存儲數據的最短類型。這樣可以減少對磁盤空間、內存、cpu緩存的使用。

    (2)避免用NULL,這個也是網上優化技術博文傳的最多的一個。理由是額外增加字節,還有使索引,索引統計和值更復雜。很多還忽略一

    ? ? 個count(列)的問題,count(列)是不會統計列值為null的行數。更多關于NULL可參考:http://www.phpben.com/?post=71

    (3)字符串如何選擇char和varchar?一般phper能想到就是char是固定大小,varchar能動態儲存數據。這里整理一下這兩者的區別:

    屬性

    Char

    Varchar

    值域大小

    最長字符數是255(不是字節),不管什么編碼,超過此值則自動截取255個字符保存并沒有報錯。

    65535個字節,開始兩位存儲長度,超過255個字符,用2位儲存長度,否則1位,具體字符長度根據編碼來確定,如utf8

    則字符最長是21845個

    如何處理字符串末尾空格

    去掉末尾空格,取值出來比較的時候自動加上進行比較

    Version<=4.1,字符串末尾空格被刪掉,version>5.0則保留

    儲存空間

    固定空間,比喻char(10)不管字符串是否有10個字符都分配10個字符的空間

    Varchar內節約空間,但更新可能發生變化,若varchar(10),開始若儲存5個字符,當update成7個時有myisam可能把行拆開,innodb可能分頁,這樣開銷就增大

    適用場合

    適用于存儲很短或固定或長度相似字符,如MD5加密的密碼char(33)、昵稱char(8)等

    當最大長度遠大于平均長度并且發生更新的時候。

    ?

    注意當一些英文或數據的時候,最好用每個字符用字節少的類型,如latin1

    (4)整型、整形優先原則

    Tinyint、smallint、mediumint、int、bigint,分別需要8、16、24、32、64。

    值域范圍:-2^(n-1)~ 2^(n-1)-1

    很多程序員在設計數據表的時候很習慣的用int,壓根不考慮這個問題

    筆者建議:能用tinyint的絕不用smallint

    誤區:int(1) 和int(11)是一樣的,唯一區別是mysql客戶端顯示的時候顯示多少位。

    整形優先原則:能用整形的不用其他類型替換,如ip可以轉換成整形保存,如商品價格‘50.00元’則保存成50

    (5)精確度與空間的轉換。在存儲相同數值范圍的數據時,浮點數類型通常都會比DECIMAL類型使用更少的空間。FLOAT字段使用4字節存儲

    數據。DOUBLE類型需要8 個字節并擁有更高的精確度和更大的數值范圍,DECIMAL類型的數據將會轉換成DOUBLE類型。

    2、 ?sql語句優化

  • mysql> create table one (

  • id smallint(10) not null auto_increment primary key, ?

  • username char(8) not null, ?

  • password char(4) not null, ?

  • `level` tinyint (1) default 0, ?

  • last_login char(15) not null, ?

  • index(username,password,last_login))engine=innodb; ?

  • 這是test表,其中id是主鍵,多列索引(username,password,last_login),里面有10000多條數據.

  • | Table | Non_unique | Key_name | Seq_in_index | Column_name | Collation | Cardinality | Sub_part | Packed | Null |

  • Index_type | Comment | ?

  • +-------+------------+----------+--------------+-------------+-----------+-------------+----------+--------+------+

  • | one ? | ? ? ? ?0 | PRIMARY ?| ? ? ? ? ? 1 | id ? ? ? ? ?| A ? ? ? ? |20242 | ?NULL | NULL ?| ? ?|

  • BTREE ? ? | ? ? ? ? | ?

  • +-------+------------+----------+--------------+-------------+-----------+-------------+----------+--------+------+

  • | one ? | ? ? ? ?1 | username | ? ? ? ? ? ?1 | username ? ?| A ? ? ? ? |10121 | ?NULL | NULL ?| ? ? |

  • BTREE ? ? | ? ? ? ? | ?

  • +-------+------------+----------+--------------+-------------+-----------+-------------+----------+--------+------+

  • | one ? | ? ? ? ?1 | username | ? ? ? ? ? ?2 | password ? ?| A ? ? ? ? |10121 | ?NULL | NULL ?| YES ?|

  • BTREE ? ? | ? ? ? ? | ?

  • +-------+------------+----------+--------------+-------------+-----------+-------------+----------+--------+------+

  • | one ? | ? ? ? ?1 | username | ? ? ? ? ? ? ?3 | last_login ?| A ? ? ? ? |20242 | ?NULL | NULL ?| ? ? |

  • BTREE ? ? ?| ? ? ? ? | ?

  • +-------+------------+----------+--------------+-------------+-----------+-------------+----------+--------+------+

  • (1) ? ?最左前綴原則

    定義:最左前綴原則指的的是在sql where 字句中一些條件或表達式中出現的列的順序要保持和多索引的一致或以多列索引順序出現,只要出現非順序出現、斷層都無法利用到多列索引。

    舉例說明:上面給出一個多列索引(username,password,last_login),當三列在where中出現的順序如(username,password,last_login)、(username,password)、(username)才能用到索引,如下面幾個順序(password,last_login)、(passwrod)、(last_login)---這三者不從username開始,(username,last_login)---斷層,少了password,都無法利用到索引。

    因為B+tree多列索引保存的順序是按照索引創建的順序,檢索索引時按照此順序檢索

    測試:以下測試不精確,這里只是說明如何才能正確按照最左前綴原則使用索引。還有的是以下的測試用的時間0.00sec看不出什么時間區別,因為數據量只有20003條,加上沒有在實體機上運行,很多未可預知的影響因素都沒考慮進去。當在大數據量,高并發的時候,最左前綴原則對與提高性能方面是不可否認的。

    Ps:最左前綴原則中where字句有or出現還是會遍歷全表

    (1.1)能正確的利用索引

    l ?Where子句表達式順序是(username)

  • mysql> explain select * from one where username='abgvwfnt'; ?

  • +----+-------------+-------+------+---------------+----------+---------+-------+------+-------------+ ?

  • | id | select_type | table | type | possible_keys | key ? ? ?| key_len | ref ? |rows | Extra ? ? ? | ?

  • +----+-------------+-------+------+---------------+----------+---------+-------+------+-------------+ ?

  • | ?1 | SIMPLE ? ? ?| one ? | ref ?| username ? ? ?| username | 24 ? ? ?| const |5 | Using where | ?

  • +----+-------------+-------+------+---------------+----------+---------+-------+------+-------------+ ?

  • 1 row in set (0.00 sec) ?

  • l ?Where子句表達式順序是(username,password)

  • mysql> explain select * from one where username='abgvwfnt' and password='123456'; ?

  • +----+-------------+-------+------+---------------+----------+---------+-------------+------+-------------+ ?

  • | id | select_type | table | type | possible_keys | key ? ? ?| key_len | ref | rows | Extra ? ? ? | ?

  • +----+-------------+-------+------+---------------+----------+---------+-------------+------+-------------+ ?

  • | ?1 | SIMPLE ? ? ?| one ? | ref ?| username ? ? ?| username | 43 ? ? ?| const,const | ? ?1 | Using where | ?

  • +----+-------------+-------+------+---------------+----------+---------+-------------+------+-------------+ ?

  • 1 row in set (0.00 sec) ?

  • l ?Where子句表達式順序是(username,password, last_login)

  • mysql> explain select * from one where username='abgvwfnt' and password='123456'and last_login='1338251170'; ?

  • +----+-------------+-------+------+---------------+----------+---------+-------------------+------+-------------+ ?

  • | id | select_type | table | type | possible_keys | key ? ? ?| key_len | ref| rows | Extra ? ? ? | ?

  • +----+-------------+-------+------+---------------+----------+---------+-------------------+------+-------------+ ?

  • | ?1 | SIMPLE ? | one ? | ref ?| username ? ? | username | 83 ? ? ?| const,const,const | ? ?1 | Using where | ?

  • +----+-------------+-------+------+---------------+----------+---------+-------------------+------+-------------+ ?

  • 1 row in set (0.00 sec) ?

  • 上面可以看出type=ref 是多列索引,key_len分別是24、43、83,這說明用到的索引分別是(username), (username,password), (username,password, last_login );row分別是5、1、1檢索的數據行都很少,因為這三個查詢都按照索引前綴原則,可以利用到索引。

    (1.2)不能正確的利用索引

    l ?Where子句表達式順序是(password, last_login)

  • mysql> explain select * from one where password='123456'and last_login='1338251170'; ?

  • +----+-------------+-------+------+---------------+------+---------+------+-------+-------------+ ?

  • | id | select_type | table | type | possible_keys | key ?| key_len | ref ?| rows| Extra ? ? ? | ?

  • +----+-------------+-------+------+---------------+------+---------+------+-------+-------------+ ?

  • | ?1 | SIMPLE ? ? ?| one ? | ALL ?| NULL ? ? ? ? ?| NULL | NULL ? ?| NULL | 20146 | Using where | ?

  • +----+-------------+-------+------+---------------+------+---------+------+-------+-------------+ ?

  • 1 row in set (0.00 sec) ?

  • l ?Where 子句表達式順序是(last_login)

  • mysql> explain select * from one where last_login='1338252525'; ?

  • +----+-------------+-------+------+---------------+------+---------+------+-------+-------------+ ?

  • | id | select_type | table | type | possible_keys | key ?| key_len | ref ?| rows| Extra ? ? ? | ?

  • +----+-------------+-------+------+---------------+------+---------+------+-------+-------------+ ?

  • | ?1 | SIMPLE ? ? ?| one ? | ALL ?| NULL ? ? ? ? ?| NULL | NULL ? ?| NULL | 20146 | Using where | ?

  • +----+-------------+-------+------+---------------+------+---------+------+-------+-------------+ ?

  • 1 row in set (0.00 sec) ?

  • 以上的兩條語句都不是以username開始,這樣是用不了索引,通過type=all(全表掃描),key_len=null,rows都很大20146

    Ps:one表里只有20003條數據,為什么出現20146,這是優化器對表的一個估算值,不精確的。

    l ?Where 子句表達式雖然順序是(username,password, last_login)或(username,password)但第一個是有范圍’<’、’>’,’<=’,’>=’等出現

  • mysql> explain select * from one where username>'abgvwfnt' and password ='123456'and last_login='1338251170'; ?

  • +----+-------------+-------+------+---------------+------+---------+------+-------+-------------+ ?

  • | id | select_type | table | type | possible_keys | key ?| key_len | ref ?| rows| Extra ? ? ? | ?

  • +----+-------------+-------+------+---------------+------+---------+------+-------+-------------+ ?

  • | ?1 | SIMPLE ? ? ?| one ? | ALL ?| username ? ? ?| NULL | NULL ? ?| NULL | 20146 | Using where | ?

  • +----+-------------+-------+------+---------------+------+---------+------+-------+-------------+ ?

  • 1 row in set (0.00 sec) ?

  • 這個查詢很明顯是遍歷所有表,一個索引都沒用到,非第一列出現范圍(password列或last_login列),則能利用索引到首先出現范圍的一列,也就是“where username='abgvwfnt' and password >'123456'and last_login='1338251170';”或則“where username='abgvwfnt' and password >'123456'and last_login<'1338251170';”索引長度ref_len=43,索引檢索到password列,所以考慮多列索引的時候把那些查詢語句用的比較的列放在最后(或非第一位)。

    l ?斷層,即是where順序(username, last_login)

  • mysql> explain select * from one where username='abgvwfnt' and last_login='1338252525'; ?

  • +----+-------------+-------+------+---------------+----------+---------+-------+------+-------------+ ?

  • | id | select_type | table | type | possible_keys | key ? ? ?| key_len | ref ? | rows | Extra ? ? ? | ?

  • +----+-------------+-------+------+---------------+----------+---------+-------+------+-------------+ ?

  • | ?1 | SIMPLE ? | one ? | ref ?| username ? | username | 24 ? ? | const |5 | Using where | ?

  • +----+-------------+-------+------+---------------+----------+---------+-------+------+-------------+ ?

  • 1 row in set (0.00 sec) ?

  • 注意這里的key_len=24=8*3(8是username的長度,3是utf8編碼),rows=5,和下面一條sql語句搜索出來一樣

  • mysql> ?select * from one where username='abgvwfnt'; ?

  • +-------+----------+----------+-------+------------+ ?

  • | id ? ?| username | password | level | last_login | ?

  • +-------+----------+----------+-------+------------+ ?

  • | ?3597 | abgvwfnt | 234567 ? | ? ? 0 | 1338251420 | ?

  • | ?7693 | abgvwfnt | 456789 ? | ? ? 0 | 1338251717 | ?

  • | 11789 | abgvwfnt | 456789 ? | ? ? 0 | 1338251992 | ?

  • | 15885 | abgvwfnt | 456789 ? | ? ? 0 | 1338252258 | ?

  • | 19981 | abgvwfnt | 456789 ? | ? ? 0 | 1338252525 | ?

  • +-------+----------+----------+-------+------------+ ?

  • 5 rows in set (0.00 sec) ?

  • ?

  • mysql> ?select * from one where username='abgvwfnt' and last_login='1338252525'; ?

  • +-------+----------+----------+-------+------------+ ?

  • | id ? ?| username | password | level | last_login | ?

  • +-------+----------+----------+-------+------------+ ?

  • | 19981 | abgvwfnt | 456789 ? | ? ? 0 | 1338252525 | ?

  • +-------+----------+----------+-------+------------+ ?

  • 1 row in set (0.00 sec) ?

  • 這個就是要的返回結果,所以可以知道斷層(username,last_login),這樣只用到username索引,把用到索引的數據再重新檢查last_login條件,這個相對全表查詢來說還是有性能上優化,這也是很多sql優化文章中提到的where 范圍查詢要放在最后(這不絕對,但可以利用一部分索引)

    (1.3)如果一個查詢where子句中確實不需要password列,那就用“補洞”。

  • mysql> select distinct(password) from one; ?

  • +----------+ ?

  • | password | ?

  • +----------+ ?

  • | 234567 ? | ?

  • | 345678 ? | ?

  • | 456789 ? | ?

  • | 123456 ? | ?

  • +----------+ ?

  • 4 rows in set (0.08 sec)

  • 可以看出password列中只有這幾個值,當然在現實中不可能密碼有這么多一樣的,再說數據也可能不斷更新,這里只是舉例說明補洞的方法

  • mysql> explain select * from one where username='abgvwfnt' and password in('123456','234567','345678','456789')

  • and last_login='1338251170'; ?

  • +----+-------------+-------+-------+---------------+----------+---------+------+------+-------------+ ?

  • | id | select_type | table | type ?| possible_keys | key ? ? ?| key_len | ref ?| rows | Extra ? ? ? | ?

  • +----+-------------+-------+-------+---------------+----------+---------+------+------+-------------+ ?

  • | ?1 | SIMPLE ? ?| one | range | username ? ?| username| 83 ? ? ?| NULL |4 | Using where | ?

  • +----+-------------+-------+-------+---------------+----------+---------+------+------+-------------+ ?

  • 1 row in set (0.00 sec) ?

  • 可以看出ref=83 所有的索引都用到了,type=range是因為用了in子句。

    這個被“補洞”列中的值應該是有限的,可預知的,如性別,其值只有男和女(加多一個不男不女也無妨)。

    “補洞”方法也有瓶頸,當很多列,且需要補洞的相應列(可以多列)的值雖有限但很多(如中國城市)的時候,優化器在優化時組合起來的數量是很大,這樣的話就要做好基準測試和性能分析,權衡得失,取得一個合理的優化方法。

    (1.4)like

  • mysql> explain select * from one where username like 'abgvwfnt%'; ?

  • +----+-------------+-------+-------+---------------+----------+---------+------+------+-------------+ ?

  • | id | select_type | table | type ?| possible_keys | key ? ? ?| key_len | ref ?| ?

  • rows | Extra ? ? ? | ?

  • +----+-------------+-------+-------+---------------+----------+---------+------+------+-------------+ ?

  • | ?1 | SIMPLE ? ? ?| one ? | range | username ? ? ?| username | 24 ? ? ?| NULL | ?

  • 5 | Using where | ?

  • +----+-------------+-------+-------+---------------+----------+---------+------+------+-------------+ ?

  • 1 row in set (0.00 sec) ?

  • mysql> explain select * from one where username like '%abgvwfnt%'; ?

  • +----+-------------+-------+------+---------------+------+---------+------+-------+-------------+ ?

  • | id | select_type | table | type | possible_keys | key ?| key_len | ref ?| rows| Extra ? ? ? | ?

  • +----+-------------+-------+------+---------------+------+---------+------+-------+-------------+ ?

  • | ?1 | SIMPLE ? ? ?| one ? | ALL ?| NULL ? ? ? ? ?| NULL | NULL ? ?| NULL | 20259 | Using where | ?

  • +----+-------------+-------+------+---------------+------+---------+------+-------+-------------+ ?

  • 1 row in set (0.01 sec) ?

  • 對比就知道like操作abgvwfnt%能用到索引,%abgvwfnt%用不到

    ---------------------------------------------------------------------------------------------

    (2) ? ?Order by?優化

    (2.1)filesort優化算法.

    在mysql version()<4.1之前,優化器采用的是filesort第一種優化算法,先提取鍵值和指針,排序后再去提取數據,前后要搜索數據兩次,第一次若能使用索引則使用,第二次是隨機讀(當然不同引擎也不同)。mysql version()>=4.1,更新了一個新算法,就是在第一次讀的時候也把selcet的列也讀出來,然后在sort_buffer_size中排序(不夠大則建臨時表保存排序順序),這算法只需要一次讀取數據。所以有這個廣為人傳的一個優化方法,那就是增大sort_buffer_size。Filesort第二種算法要用到更的空間,sort_buffer_size不夠大反而會影響速度,所以mysql開發團隊定了個變量max_length_for_sort_data,當算法中讀出來的需要列的數據的大小超過該變量的值才使用,所以一般性能分析的時候會嘗試把max_length_for_sort_data改小。

    (2.2)單獨order by 用不了索引,索引考慮加where 或加limit

    先建一個索引(last_login),建的過程就不給出了

  • mysql> explain select * from one order by last_login desc; ?

  • +----+-------------+-------+------+---------------+------+---------+------+-------+----------------+ ?

  • | id | select_type | table | type | possible_keys | key ?| key_len | ref ?| rows ?

  • ?| Extra ? ? ? ? ?| ?

  • +----+-------------+-------+------+---------------+------+---------+------+-------+----------------+ ?

  • | ?1 | SIMPLE ? ? ?| one ? | ALL ?| NULL ? ? ? ? ?| NULL | NULL ? ?| NULL | 2046 ?

  • 3 | Using filesort | ?

  • +----+-------------+-------+------+---------------+------+---------+------+-------+----------------+ ?

  • 1 row in set (0.00 sec) ?

  • ?

  • mysql> explain select * from one order by last_login desc limit 10; ?

  • +----+-------------+-------+-------+---------------+------------+---------+------+------+-------+ ?

  • | id | select_type | table | type ?| possible_keys | key ? ? ?| key_len | ref ?

  • | rows | Extra | ?

  • +----+-------------+-------+-------+---------------+------------+---------+------+------+-------+ ?

  • | ?1 | SIMPLE ? | one ? | index | NULL ? ? ?| last_login ?| 4 ? ? | NULL ?

  • | ? 10 | ? ? ? | ?

  • +----+-------------+-------+-------+---------------+------------+---------+------+------+-------+ ?

  • 1 row in set (0.00 sec) ?

  • 開始沒limit查詢是遍歷表的,加了limit后,索引可以使用,看key_len 和key

    (2.3)where + orerby 類型,where滿足最左前綴原則,且orderby的列和where子句用到的索引的列的子集。即是(a,b,c)索引,where滿足最左前綴原則且order by中列a、b、c的任意組合

  • mysql> explain select * from one where username='abgvwfnt' and password ='123456 ?

  • ' and last_login='1338251001' order by password desc,last_login desc; ?

  • ?

  • +----+-------------+-------+------+---------------+----------+---------+-------------------+------+-------------+ ?

  • | id | select_type | table | type | possible_keys | key ? ? ?| key_len | ref ?

  • ?

  • ? | rows | Extra ? ? ? | ?

  • +----+-------------+-------+------+---------------+----------+---------+-------------------+------+-------------+ ?

  • | ?1 | SIMPLE ? ? ?| one ? | ref ?| username ? ? ?| username | 83 ? ? ?| const,c ?

  • onst,const | ? ?1 | Using where | ?

  • +----+-------------+-------+------+---------------+----------+---------+-------------------+------+-------------+ ?

  • 1 row in set (0.00 sec) ?

  • ?

  • mysql> explain select * from one where username='abgvwfnt' and password ='123456 ?

  • ' and last_login='1338251001' order by password desc,level desc; ?

  • +----+-------------+-------+------+---------------+----------+---------+-------------------+------+----------------------------+ ?

  • | id | select_type | table | type | possible_keys | key ? ? ?| key_len | ref| rows | Extra ? ? ? ? ? ? ? ? ? ? ? | ?

  • +----+-------------+-------+------+---------------+----------+---------+-------------------+------+-----------------------------+ ?

  • | ?1 | SIMPLE ? ? ?| one ? | ref ?| username ? ? ?| username | 83 ? ? ?| const,c ?

  • onst,const | ? ?1 | Using where; Using filesort | ?

  • +----+-------------+-------+------+---------------+----------+---------+-------------------+------+-----------------------------+ ?

  • ?

  • 1 row in set (0.00 sec) ?

  • 上面兩條語句明顯的區別是多了一個非索引列level的排序,在extra這列對了Using filesort

    筆者測試結果:where滿足最左前綴且order by中的列是該多列索引的子集時(也就是說orerby中沒最左前綴原則限制),不管是否有asc ,desc混合出現,都能用索引來滿足order by。

    筆者測試過,因為篇幅比較大,這里就不一一列出。

    Ps:很優化博文都說order by中的列要where中出現的列(是索引)的順序一致,筆者認為不夠嚴謹。

    (2.3) where + orerby+limit

    這個其實也差不多,只要where最左前綴,orderby也正確,limit在此影響不大

    (2.4)如何考慮order by來建索引

    這個回歸到創建索引的問題來,在比較常用的oder by的列和where中常用的列建立多列索引,這樣優化起來的廣度和擴張性都比較好,當然如果要考慮UNION、JOIN、COUNT、IN等進來就復雜很多了

    (3) ? ?隔離列

    隔離列是只查詢語句中把索引列隔離出來,也就是說不能在語句中把列包含進表達式中,如id+1=2、inet_aton('210.38.196.138')---ip轉換成整數、convert(123,char(3))---數字轉換成字符串、date函數等mysql內置的大多函數。

    非隔離列影響性能很大甚至是致命的,這也就是趕集網石展的《三十六軍規》中的一條,雖然他沒說明是隔離列。

    以下就測試一下:

    首先建立一個索引(last_login ),這里就不給出建立的代碼了,且把last_login改成整型(這里只是為了方便測試,并不是影響條件)

  • mysql> explain select * from one where last_login = 8388605; ?

  • +----+-------------+-------+------+---------------+------------+---------+-------+-------+-------------+ ?

  • | id | select_type | table | type | possible_keys | key ? ? ? ?| key_len | ref | rows ?| Extra ? ? ? | ?

  • +----+-------------+-------+------+---------------+------------+---------+-------+-------+-------------+ ?

  • | ?1 | SIMPLE ? ? ?| one ? | ref ?| last_login ? ?| last_login | 3 ? ? ? | const ?

  • | 1 | Using where | ?

  • +----+-------------+-------+------+---------------+------------+---------+-------+-------+-------------+ ?

  • 1 row in set, 1 warning (0.00 sec) ?

  • 容易看出建的索引已起效

  • mysql> explain select * from one where last_login +1= 8388606 ; ?

  • +----+-------------+-------+------+---------------+------+---------+------+-------+-------------+ ?

  • | id | select_type | table | type | possible_keys | key ?| key_len | ref ?| rows ?

  • ?| Extra ? ? ? | ?

  • +----+-------------+-------+------+---------------+------+---------+------+-------+-------------+ ?

  • | ?1 | SIMPLE ? ? ?| one ? | ALL ?| NULL ? ? ? ? ?| NULL | NULL ? ?| NULL | 2049 ?

  • 7 | Using where | ?

  • +----+-------------+-------+------+---------------+------+---------+------+-------+-------------+ ?

  • 1 row in set (0.00 sec) ?

  • last_login +1=8388608非隔離列的出現導致查找的列20197,說明是遍歷整張表且索引不能使用。

    這是因為這條語句要找出所有last_login的數據,然后+1再和20197比較,優化器在這方面比較差,性能很差。

    所以要盡可能的把列隔離出來,如last_login +1=8388606改成login_login=8388607,或者把計算、轉換等操作先用php函數處理過再傳遞給mysql服務器

    (4) ? ?OR、IN、UNION ALL,可以嘗試用UNION ALL

    (4.1)or會遍歷表就算有索引

  • mysql> explain select * from one where username = 'abgvwfnt' or password='123456'; ?

  • +----+-------------+-------+------+---------------+------+---------+------+-------+-------------+ ?

  • | id | select_type | table | type | possible_keys | key ?| key_len | ref ?| rows| ?Extra ? ? ? | ?

  • +----+-------------+-------+------+---------------+------+---------+------+-------+-------------+ ?

  • | ?1 | SIMPLE ? | one ?| ALL ?| username ? | NULL | NULL ? ?| NULL | 20259 | Using where | ?

  • +----+-------------+-------+------+---------------+------+---------+------+-------+-------------+ ?

  • 1 row in set (0.00 sec) ?

  • (4.2)對于in,這個是有爭議的,網上很多優化方案中都提到盡量少用in,這不全面,其實在in里面如果是常量的話,可一大膽的用in,這個也是趕集網石展、阿里hellodab的觀點(筆者從微博中獲知)。應用hellodab一句話“MySQL用IN效率不好,通常是指in中嵌套一個子查詢,因為MySQL的查詢重寫可能會產生一個不好的執行計劃,而如果in里面是常量的話,我認為性能沒有任何問題,可以放心使用”---------當然對于這個比較的話,沒有實戰數據的話很難辯解,就算有,影響性能的因素也很多,也許會每個dba都有不同的測試結果.這也簽名最左前綴中“補洞”一個方法

    (4.3)UNION All 直接返回并集,可以避免去重的開銷。之所說“嘗試”用UNION All 替代 OR來優化sql語句,因為這不是一直能優化的了,這里只是作為一個方法去嘗試。

    (5) ? ?索引選擇性

    索引選擇性是不重復的索引值也叫基數(cardinality)表中數據行數的比值,索引選擇性=基數/數據行,基數可以通過“show index from 表名”查看。

    高索引選擇性的好處就是mysql查找匹配的時候可以過濾更多的行,唯一索引的選擇性最佳,值為1。

    那么對于非唯一索引或者說要被創建索引的列的數據內容很長,那就要選擇索引前綴。這里就簡單說明一下:

  • mysql> select count(distinct(username))/count(*) ?from one; ?

  • +------------------------------------+ ?

  • | count(distinct(username))/count(*) | ?

  • +------------------------------------+ ?

  • | ? ? ? ? ? ? ? ? ? ? ? ? ? ? 0.2047 | ?

  • +------------------------------------+ ?

  • 1 row in set (0.09 sec) ?

  • count(distinct(username))/count(*)就是索引選擇性的值,這里0.2太小了。

    假如username列數據很長,則可以通過

    select count(distinct(concat(first_name, left(last_name,?N))/count(*) ?from one;測試出接近1的索引選擇性,其中N是索引的長度,窮舉法去找出N的值,然后再建索引。

    (6) ? ?重復或多余索引

    很多phper開始都以為建索引相對多點性能就好點,壓根沒考慮到有些索引是重復的,比如建一個(username),(username,password), (username,password,last_login),很明顯第一個索引是重復的,因為后兩者都能滿足其功能。

    要有個意識就是,在滿足功能需求的情況下建最少索引。對于INNODB引擎的索引來說,每次修改數據都要把主鍵索引,輔助索引中相應索引值修改,這可能會出現大量數據遷移,分頁,以及碎片的出現。

    3、系統配置與維護優化

    (1) ? ?重要的一些變量

    l ?key_buffer_size索引塊緩存區大小, 針對MyISAM存儲引擎,該值越大,性能越好.但是超過操作系統能承受的最大值,反而會使mysql變得不穩定. ----這是很重要的參數

    l ?sort_buffer_size 這是索引在排序緩沖區大小,若排序數據大小超過該值,則創建臨時文件,注意和myisam_sort_buffer_size的區別----這是很重要的參數

    l ?read_rnd_buffer_size當排序后按排序后的順序讀取行時,則通過該緩沖區讀取行,避免搜索硬盤。將該變量設置為較大的值可以大大改進ORDER BY的性能。但是,這是為每個客戶端分配的緩沖區,因此你不應將全局變量設置為較大的值。相反,只為需要運行大查詢的客戶端更改會話變量

    l ?join_buffer_size用于表間關聯(join)的緩存大小

    l ?tmp_table_size緩存表的大小

    l ?table_cache允許 MySQL 打開的表的最大個數,并且這些都cache在內存中

    l ?delay_key_write針對MyISAM存儲引擎,延遲更新索引.意思是說,update記錄時,先將數據up到磁盤,但不up索引,將索引存在內存里,當表關閉時,將內存索引,寫到磁盤

    更多參數查看http://www.phpben.com/?post=70

    (2) ? ?optimize、Analyze、check、repair維護操作

    l ?optimize 數據在插入,更新,刪除的時候難免一些數據遷移,分頁,之后就出現一些碎片,久而久之碎片積累起來影響性能,這就需要DBA定期的優化數據庫減少碎片,這就通過optimize命令。

    如對MyisAM表操作:optimize table 表名

    對于InnoDB表是不支持optimize操作,否則提示“Table does not support optimize, doing recreate + analyze instead”,當然也可以通過命令:alter table one type=innodb; 來替代。

    l ?Analyze 用來分析和存儲表的關鍵字的分布,使得系統獲得準確的統計信息,影響 SQL 的執行計劃的生成。對于數據基本沒有發生變化的表,是不需要經常進行表分析的。但是如果表的數據量變化很明顯,用戶感覺實際的執行計劃和預期的執行計劃不 同的時候,執行一次表分析可能有助于產生預期的執行計劃。

    Analyze table 表名

    l ?Check檢查表或者視圖是否存在錯誤,對 MyISAM 和 InnoDB 存儲引擎的表有作用。對于 MyISAM 存儲引擎的表進行表檢查,也會同時更新關鍵字統計數據

    l ?Repair optimize需要有足夠的硬盤空間,否則可能會破壞表,導致不能操作,那就要用上repair,注意INNODB不支持repair操作

    以上的操作出現的都是如下這是check

  • +----------+-------+--------------+-------------+ ?

  • | Table ?| Op ?| Msg_type| Msg_text | ?

  • +----------+-------+--------------+-------------+ ?

  • | test.one | check | status ?| OK ? ? | ?

  • +----------+-------+--------------+-------------+ ?

  • 其中op是option 可以是repair check optimize,msg_type 表示信息類型,msg_text 表示信息類型,這里就說明表的狀態正常。如在innodb表使用repair就出現note | The storage engine for the table doesn't support repair

    注意:以上操作最好在數據庫訪問量最低的時候操作,因為涉及到很多表鎖定,掃描,數據遷移等操作,否則可能導致一些功能無法正常使用甚至數據庫崩潰。

    (3)表結構的更新與維護

    l ?改表結構。當要在數據量千萬級的數據表中使用alter更改表結構的時候,這是一個棘手問題。一種方法是在低并發低訪問量的時候用平常的alter更改表。另外一種就是建另一個與要修改的表,這個表除了要修改的結構屬性外其他的和原表一模一樣,這樣就能得到一個相應的.frm文件,然后用flush with read lock 鎖定讀,然后覆蓋用新建的.frm文件覆蓋原表的.frm,最后unlock table 釋放表。

    l ?建立新的索引。一般方法這里不說。

    1、 ?創建沒索引的a表,導入數據形成.MYD文件。

    2、 ?創建包括索引b表,形成.FRM和.MYI文件

    3、 ?鎖定讀寫

    4、 ?把b表的.FRM和.MYI文件改成a表名字

    5、 ?解鎖

    6、 ?用repair創建索引。

    這個方法對于大表也是很有效的。這也是為什么很多dba堅持說“先導數據庫在建索引,這樣效率更快”

    l ?定期檢查mysql服務器

    定期使用show status、show processlist等命令檢查數據庫。這里就不細說,這說起來也篇幅是比較大的,筆者對這個也不是很了解

    第四部分:圖說mysql查詢執行流程

    1、 ?查詢緩存,判斷sql語句是否完全匹配,再判斷是否有權限,兩個判斷為假則到解析器解析語句,為真則提取數據結果返回給用戶。

    2、 ?解析器解析。解析器先詞法分析,語法分析,檢查錯誤比如引號有沒閉合等,然后生成解析樹。

    3、 ?預處理。預處理解決解析器無法決解的語義,如檢查表和列是否存在,別名是否有錯,生成新的解析樹。

    4、 ?優化器做大量的優化操作。

    5、 ?生成執行計劃。

    6、 ?查詢執行引擎,負責調度引擎獲取相應數據

    7、 ?返回結果。

    ?

    ?

    這篇博文準備,寫,將用了一個月時間!終于寫完,但真的學了很多東西! 有紕漏請聯系:benwin(bw@7bus.net/445235728@qq.com)

    ?

    ?

    參考:

    http://www.cnblogs.com/hustcat/archive/2009/10/28/1591648.html

    http://www.cnblogs.com/oldhorse/archive/2009/11/16/1604009.html

    http://blog.csdn.net/zuiaituantuan/article/details/5909334

    http://www.codinglabs.org/html/theory-of-mysql-index.html

    http://isky000.com/database/mysql_order_by_implement

    http://dev.mysql.com/doc/refman/5.0/en/server-system-variables.html

    ?

    http://www.docin.com/p-211669085.html

    覺得文章有用?立即: 和朋友一起?共學習 共進步!

    建議繼續學習:

  • 淺談MySQL索引背后的數據結構及算法 ???(閱讀:5688)
  • 由淺入深理解索引的實現(2) ???(閱讀:4703)
  • 如何建立合適的索引? ???(閱讀:4419)
  • HBase二級索引與Join ???(閱讀:4140)
  • InnODB和MyISAM索引統計集合 ???(閱讀:4124)
  • Innodb 表和索引結構 ???(閱讀:3802)
  • MySQL索引背后的數據結構及算法原理 ???(閱讀:3564)
  • 多維度分類排行榜應用:用位圖索引 ???(閱讀:3280)
  • 如何建立索引 ???(閱讀:3179)
  • mysql索引淺析 ???(閱讀:3113)
  • ?

    轉載于:https://www.cnblogs.com/mr-amazing/p/4535544.html

    總結

    以上是生活随笔為你收集整理的mysql索引结构原理、性能分析与优化的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

    国产最新在线视频 | 一性一交视频 | 欧洲在线免费视频 | 91日本在线播放 | 狠狠干天天射 | 成人一区二区在线观看 | 激情五月婷婷综合 | 精品久久久久久电影 | 婷婷网在线 | 欧美视频国产视频 | 91在线看片 | 亚洲一级黄色av | 探花视频在线观看+在线播放 | 激情五月在线视频 | 日韩二区在线播放 | 国产免码va在线观看免费 | 日韩欧美高清在线观看 | 超碰在线日本 | www色网站| 欧美精品久久人人躁人人爽 | 欧美日韩国产二区三区 | 色综合久久久久 | 成人免费 在线播放 | 91精品国产乱码久久桃 | 国产精品theporn | 欧美精品成人在线 | 91中文在线 | 久久久一本精品99久久精品 | av在线小说 | 国产女v资源在线观看 | 国产精品国产精品 | 亚洲国产成人精品电影在线观看 | 曰本三级在线 | 免费观看一区二区三区视频 | 亚洲精品视频在线观看视频 | 中文字幕成人 | 亚州精品在线视频 | 亚洲在线视频免费观看 | av在线免费播放 | 久久视频在线观看中文字幕 | 日韩av电影免费观看 | 成人一区二区在线 | 国产黄在线播放 | 伊人成人久久 | 又粗又长又大又爽又黄少妇毛片 | 久草影视在线观看 | 久久久久久久久久久成人 | 中文理论片 | 午夜精品中文字幕 | 国产一级二级在线观看 | 日韩在线观看一区 | av中文字幕亚洲 | 免费观看mv大片高清 | 狠狠操影视 | 国产尤物视频在线 | 激情影院在线观看 | 久久国产欧美日韩 | 中文字幕在线观看你懂的 | 久久国产网站 | 国产高清中文字幕 | 又湿又紧又大又爽a视频国产 | 日日夜夜噜噜噜 | 日韩精品无 | 1024久久 | 久久精品牌麻豆国产大山 | 国产精品久久久久久久99 | 狠狠操导航 | 国产午夜精品av一区二区 | 国产成人精品综合 | 激情综合中文娱乐网 | 日韩在线一二三区 | 国产精品毛片久久久 | 狠狠狠色 | 亚洲欧美日本A∨在线观看 青青河边草观看完整版高清 | 婷婷六月综合网 | 亚洲日韩中文字幕 | 欧美日韩免费在线视频 | 欧美精品一区二区免费 | 中文字幕999 | 日韩一二区在线 | 国产高清视频网 | 国产精品一区二区久久精品爱涩 | 在线播放 亚洲 | 久久九九免费视频 | 中文字幕三区 | 国产v在线 | 91精品国产综合久久福利不卡 | 精品国内自产拍在线观看视频 | 成人国产一区二区 | 天天干天天看 | 亚洲h色精品 | 正在播放国产一区 | 一区二区三区精品在线 | 中文字幕av电影下载 | 在线影院 国内精品 | 国产精品中文字幕在线观看 | 97热在线观看 | 综合天天 | 蜜臀av性久久久久蜜臀aⅴ四虎 | 成人免费在线播放 | 国产香蕉97碰碰碰视频在线观看 | 亚洲成av人片在线观看香蕉 | 手机在线看永久av片免费 | 成人午夜电影网 | 国产精品女同一区二区三区久久夜 | 欧美色图东方 | 久久99亚洲精品久久 | 精品国产美女在线 | 三日本三级少妇三级99 | 精品久久精品 | 中文字幕视频一区二区 | 狠狠干我 | 狠狠色免费 | 伊人五月婷 | 成人午夜网址 | 在线观看视频免费大全 | 激情久久久久久久久久久久久久久久 | 综合网久久 | 中文字幕精品一区二区精品 | 久久久久国产精品www | 日韩欧美高清在线观看 | 999成人网| 国内丰满少妇猛烈精品播放 | 99精品在线看 | 国内少妇自拍视频一区 | 日韩欧美在线视频一区二区 | 免费影视大全推荐 | 天天色成人 | 五月天激情开心 | 五月天婷亚洲天综合网鲁鲁鲁 | 一级α片| 激情网在线观看 | 国产成人99久久亚洲综合精品 | 国产精品成人免费精品自在线观看 | 精品久久久久久亚洲 | 久久免费精彩视频 | 中文乱幕日产无线码1区 | 日韩精品久久久免费观看夜色 | 超碰人在线| 美女在线黄| 久久一本综合 | 色综合夜色一区 | 色诱亚洲精品久久久久久 | 欧美一二三区在线观看 | 91亚洲精品久久久蜜桃 | 精品视频123区在线观看 | 99视频在线免费 | 欧美做受69 | 久久精品久久久久电影 | 国产精品久久久久久久久免费 | 一区二区三区在线播放 | 午夜18视频在线观看 | 99热最新精品 | 精品一区二区在线免费观看 | 日韩精品视频在线观看网址 | 2021国产精品视频 | 啪啪激情网| 黄色三级久久 | 国产精品久久久久久久久久不蜜月 | 欧美激情综合五月色丁香 | 亚洲综合小说电影qvod | 九九免费精品 | 天天操天天操天天操天天操天天操天天操 | 久久96国产精品久久99漫画 | 中文av字幕在线观看 | 亚洲三级黄色 | 国产精品久久久久久久久久尿 | 天天综合网 天天综合色 | 91精品在线视频 | 久久精品久久精品久久39 | a级国产乱理伦片在线观看 亚洲3级 | 色网免费观看 | 99热国产精品| 97精品国产91久久久久久久 | 99热这里是精品 | 在线观看亚洲国产精品 | 欧美激情综合五月色丁香小说 | 91视频在线观看免费 | av免费在线观看网站 | 国产精品久久久久久久毛片 | 日本高清dvd| 日韩一区二区免费视频 | 天天曰视频 | 人人爽人人爽人人片 | 亚洲男男gⅴgay双龙 | 天天做天天干 | 波多野结衣在线播放一区 | 中文字幕中文字幕在线中文字幕三区 | 久久综合久色欧美综合狠狠 | 久久久久久久久久久久99 | 美女视频黄免费 | 国产欧美精品xxxx另类 | 免费a v观看| 911亚洲精品第一 | 久久国产网站 | 在线 成人 | 99视频免费在线观看 | 一区二区三区动漫 | 在线网站黄 | 夜夜澡人模人人添人人看 | 天天se天天cao天天干 | 久久天天操 | 日韩欧美综合在线视频 | 日韩大片在线免费观看 | 狠狠操.com | 亚洲 欧洲 国产 精品 | 国产精品女人久久久久久 | 手机在线看a | www.久久婷婷 | 国产精品免费久久久久久久久久中文 | 日日摸日日 | 亚洲一本视频 | 国产精品美女视频网站 | 午夜色大片在线观看 | 亚洲日本韩国一区二区 | a爱爱视频 | 一区二区三区在线不卡 | 日本特黄特色aaa大片免费 | 99精品国产成人一区二区 | 久久99久久精品国产 | 色在线免费| 日韩二三区 | 国产伦理久久 | www夜夜 | 亚洲精品一区二区网址 | 狠狠干天天色 | 久久黄色美女 | 久草在线视频免费资源观看 | 久久97久久 | 美女视频永久黄网站免费观看国产 | 国产精品涩涩屋www在线观看 | 91免费看黄 | 亚洲激情 | 午夜三级影院 | 国产日本高清 | 808电影免费观看三年 | 国产高清在线免费 | 国内外成人在线视频 | 天天射天天干天天操 | 久久久久久高潮国产精品视 | 欧美日韩一区二区视频在线观看 | 日本色小说视频 | 激情五月五月婷婷 | 精品国产一区二区三区久久久蜜月 | 国产无套精品久久久久久 | 五月婷婷综合久久 | av在线网站免费观看 | 91视频 - 114av| 91精品视频免费看 | 91色在线观看视频 | 成人一级电影在线观看 | 久久超碰网 | 久久精品99国产精品 | 日韩av在线一区二区 | 亚洲视频久久 | 久久久黄色免费网站 | 91福利视频免费观看 | 91社区国产高清 | 丁香激情综合久久伊人久久 | 99热99热| av黄网站 | 正在播放国产一区 | 中文字幕av最新更新 | 91精选 | 国产黑丝袜在线 | 超碰国产在线 | 热99在线视频 | 国产生活一级片 | 日本久久中文 | 国产精品一区二区三区99 | 色哟哟国产精品 | 成人黄色免费在线观看 | 在线观看成人网 | 日本美女xx| 国产自在线观看 | 久久国内免费视频 | www.狠狠操.com| 成人在线视频论坛 | 中文字幕一区二区三区精华液 | 91高清视频| 国产精品久久婷婷六月丁香 | 99热这里有精品 | 久久国产精品免费观看 | 国产黄免费在线观看 | 亚洲资源在线 | 一区二区视频在线看 | 免费网站观看www在线观看 | 欧美激精品| www.在线观看av | 少妇激情久久 | 99精品视频免费在线观看 | 中文字幕亚洲不卡 | 久久视频在线看 | 欧美一级免费 | 国产精品一区二区久久精品爱涩 | 超碰在线cao | www.日日日.com| 欧美日韩一区二区三区在线免费观看 | 五月婷在线| 91精品对白一区国产伦 | 国产精品免费观看网站 | 久久久免费在线观看 | 视频在线观看99 | 超碰97中文| 中文字幕亚洲综合久久五月天色无吗'' | 丁香 婷婷 激情 | 午夜视频免费在线观看 | 五月天久久 | 国产精彩在线视频 | 国产免费亚洲 | 伊甸园永久入口www 99热 精品在线 | www视频在线播放 | 99久久爱 | 91精品国产一区二区三区 | 午夜体验区 | 玖玖在线精品 | 色婷婷久久久 | 中文字幕在线免费97 | 日韩精品一区二区三区在线播放 | 日本少妇高清做爰视频 | 欧美天天射 | 亚洲成人av片 | 亚洲小视频在线观看 | 久久精品永久免费 | 特级毛片在线免费观看 | 999电影免费在线观看2020 | 在线中文字幕av观看 | 黄色片毛片 | 久久激情久久 | 国产亚洲一级高清 | 欧美日韩一级久久久久久免费看 | 欧美日韩国产区 | 在线观看色网站 | av成人在线看 | 久久伊人操 | 91免费视频网站在线观看 | 亚洲视频久久久久 | 黄色成人91| 亚洲日本一区二区在线 | 九九天堂 | 亚洲精品五月天 | 有码中文字幕在线观看 | 免费网站观看www在线观看 | 999国内精品永久免费视频 | 日日爽视频 | 日韩三级久久 | 最近更新中文字幕 | 九九九九色 | 九九九电影免费看 | 激情偷乱人伦小说视频在线观看 | 亚洲视频免费在线观看 | 亚洲国产精品成人va在线观看 | 丁香视频 | 亚洲国产精久久久久久久 | 久久免费99 | 中文高清av | 蜜臀精品久久久久久蜜臀 | 亚洲精品av中文字幕在线在线 | 久久综合久色欧美综合狠狠 | 最近中文字幕高清字幕在线视频 | 国产婷婷精品 | 欧洲精品视频一区 | 久久国产一区二区 | 免费97视频 | 国产视频精品免费 | 色综合综合| 亚洲最新av网站 | 欧美色图30p| 精品久久久久久久久久久久久久久久久久 | 日本中文乱码卡一卡二新区 | 伊人婷婷 | 91麻豆免费版 | 国产成本人视频在线观看 | 国产免费高清视频 | 在线视频99| 最近在线中文字幕 | 国产在线视频一区 | www.夜夜干.com| 麻豆视频国产精品 | 国产成人精品电影久久久 | 西西大胆免费视频 | 日韩素人在线观看 | 九九久久成人 | 欧美日韩亚洲在线观看 | 欧美日本不卡 | 99精品视频观看 | 亚洲一区免费在线 | 久久久在线观看 | 不卡av在线播放 | 欧美日韩视频一区二区三区 | 国产乱对白刺激视频不卡 | 最近日本韩国中文字幕 | 国产女人40精品一区毛片视频 | 国产亚洲欧美精品久久久久久 | 97超碰在线资源 | 日日摸日日添日日躁av | 五月婷婷狠狠 | 欧洲精品二区 | 亚洲一区精品二人人爽久久 | 91精品国产麻豆国产自产影视 | 日韩久久久久久 | 美女视频黄在线观看 | 在线视频日韩精品 | 久久久久久久久久免费视频 | 欧美性久久久久久 | 亚洲精选99 | 日日干精品 | 午夜精品一区二区三区在线播放 | 深爱激情开心 | 欧美精品成人在线 | 久草在线视频网站 | 99在线热播精品免费99热 | 日韩一二三区不卡 | 成人免费视频播放 | 久久在线免费观看视频 | 91精品国产成人 | 欧美成人黄色 | 国产二区视频在线观看 | 99自拍视频在线观看 | 色五月色开心色婷婷色丁香 | 深爱综合网| 精品国产一区在线观看 | 精品国产成人av | 香蕉久久久久 | 日韩一级电影网站 | 久久理论片 | 伊人干综合 | 国产一区视频在线观看免费 | 中文字幕久久网 | 欧美一区二区在线免费看 | 午夜av大片| 国产91免费观看 | 91高清免费观看 | 亚洲日本欧美 | 最近2019年日本中文免费字幕 | 国产精品影音先锋 | 日韩在线首页 | 色网站在线观看 | 奇米影视777影音先锋 | 久在线观看 | 亚洲精品18p| 国产一级在线视频 | 欧美男同视频网站 | 97超碰超碰 | 国产精品一区久久久久 | 日韩超碰在线 | 日韩精品视频在线观看免费 | 91香蕉久久 | 久久九九久久九九 | 四虎成人在线 | 依人成人综合网 | 四虎国产 | 亚洲精品国产日韩 | 正在播放亚洲精品 | 亚洲精品在线视频 | 成人影片在线播放 | 欧美日韩性视频在线 | 国产成人一区二区三区免费看 | 草久热 | 激情视频在线观看网址 | 五月天婷亚洲天综合网鲁鲁鲁 | 亚洲免费激情 | 日韩在线观看你懂的 | 超薄丝袜一二三区 | 91探花视频 | 91大神精品视频在线观看 | 久久这里只精品 | 蜜桃视频成人在线观看 | 亚洲一区二区视频在线 | 日韩在线观看免费 | 国产成人一区二区三区在线观看 | 黄色电影小说 | 天天拍夜夜拍 | 久草亚洲视频 | 国产一线二线三线性视频 | 最新av网址在线 | 日韩一级黄色av | a黄色影院 | 免费观看www7722午夜电影 | 中文字幕在线观看免费高清完整版 | 天天亚洲 | 五月婷婷香蕉 | 伊人五月| 99亚洲精品在线 | 伊人永久 | 91在线九色| 国产美女精品在线 | 91精品啪 | 亚洲国产精品视频 | 日b视频在线观看网址 | 欧美另类调教 | 精品国产精品久久一区免费式 | 日韩.com | 麻豆国产露脸在线观看 | 中文字幕中文中文字幕 | 在线观看亚洲a | 免费精品在线 | 黄污在线观看 | 欧美日韩国产亚洲乱码字幕 | 91精品国自产在线观看 | 国产剧情久久 | 99国产视频| 在线看片成人 | 久久久久国产a免费观看rela | 99产精品成人啪免费网站 | 91精品久久久久久综合五月天 | www.狠狠操.com | 久久精品永久免费 | 亚洲天堂社区 | 91看片麻豆 | 国产精品一区二区三区在线播放 | 毛片基地黄久久久久久天堂 | 日本久久中文 | 国产精品美女免费看 | 久久99国产视频 | 一区二区影院 | 日韩一区二区三区不卡 | 国产在线观看一区 | 黄色的网站在线 | 91香蕉视频 mp4 | 日韩精品欧美精品 | 探花视频免费观看 | 黄色av一区 | 国产99在线 | 福利视频导航网址 | 91av电影在线观看 | 久久久综合 | 在线观看一区视频 | 天天色天 | 中文字幕精品一区二区三区电影 | 日韩欧美在线不卡 | 国产亚洲视频在线免费观看 | 国产黄色电影 | 国产一区二区三区视频在线 | 日韩和的一区二在线 | 久久综合免费 | 日韩一区二区三区视频在线 | 黄色福利网站 | 久久不色 | 又紧又大又爽精品一区二区 | 18国产精品白浆在线观看免费 | 久久久久久看片 | 精品亚洲成a人在线观看 | 国产精品aⅴ| 欧美日韩一区二区在线 | www.夜夜骑.com | 国产在线v | 欧美日韩国产网站 | 国产精品国产三级国产aⅴ9色 | 7777精品伊人久久久大香线蕉 | 天天射色综合 | 国产特级毛片aaaaaa高清 | 五月婷婷丁香网 | 五月婷婷毛片 | 在线电影av | 欧美日韩国产亚洲乱码字幕 | 日韩超碰 | 97伊人网| 日韩偷拍精品 | 亚洲做受高潮欧美裸体 | 1024手机在线看 | 在线视频 影院 | 久久国产高清视频 | 中文字幕第一页av | 麻豆视频观看 | 国产成人av网站 | 午夜私人影院 | 又粗又长又大又爽又黄少妇毛片 | 国产在线欧美在线 | 久久的色 | www.夜夜干.com | 麻豆 videos | 欧美一区二区三区在线看 | 亚洲最大色 | 91精品国产高清自在线观看 | 国产成人在线免费观看 | 青青河边草手机免费 | 国产123区在线观看 国产精品麻豆91 | 美女天天操 | 99产精品成人啪免费网站 | 天天五月天色 | 成人在线视 | 人人干人人模 | 久草在线中文888 | 国产精品成人免费精品自在线观看 | 午夜电影 电影 | 亚洲视频综合在线 | 国产精品一区在线观看 | 国产亚洲小视频 | 毛片黄色一级 | 国内精品美女在线观看 | 69久久夜色精品国产69 | 精品女同一区二区三区在线观看 | 夜色资源网 | 偷拍福利视频一区二区三区 | 在线免费观看不卡av | 人人爱人人射 | 激情久久五月 | 日韩在线高清视频 | 狠狠色丁香婷婷综合最新地址 | 麻豆精品91| 超碰在线天天 | 97中文字幕 | 91久久精品一区 | 国产成人av电影在线 | 日韩在线 | 久久亚洲私人国产精品va | 亚洲综合色网站 | 亚洲精品自在在线观看 | 亚洲欧美日韩国产一区二区 | 丁香久久久 | 麻豆成人精品视频 | 在线观看色网 | 男女视频国产 | 国产精品久久久久婷婷二区次 | 亚州精品成人 | 一本一本久久aa综合精品 | 国产精品k频道 | 亚洲国产伊人 | 亚洲精品女人久久久 | 国产精品视频不卡 | 日韩免费电影网站 | 国产精品亚洲视频 | 91av免费在线观看 | 久草在线免费看视频 | 久久激情片 | 在线观看不卡的av | 国产九色视频在线观看 | 超碰电影在线观看 | 九月婷婷人人澡人人添人人爽 | 久久综合免费视频 | 久久视频在线视频 | 一区二区久久久久 | 91精品无人成人www | 国产精品综合久久久久 | 精品中文字幕视频 | 综合色在线 | 日韩免费在线看 | 国产小视频免费观看 | 91插插视频| 五月天天色 | 国内揄拍国内精品 | 91成人午夜 | 国产亚洲欧美在线视频 | 欧美日韩性生活 | 九精品 | 欧美精品二区 | 4hu视频 | 亚洲一区久久久 | 色a资源在线 | 99激情网 | 丁香久久五月 | 日韩网站在线观看 | 狠狠干天天操 | 久久一区精品 | 久久久美女 | 97干com| 日本 在线 视频 中文 有码 | 伊人六月 | 91成人免费视频 | 中文字幕乱码电影 | 欧美 日韩 视频 | 国产精品久久久久久久妇 | 国产黄色av网站 | 成人黄色毛片视频 | 97在线观看免费高清 | 亚洲激情久久 | 天天躁日日躁狠狠躁av麻豆 | 亚洲做受高潮欧美裸体 | 久久久999 | 色资源网在线观看 | 精品久久久久免费极品大片 | 日韩午夜精品 | 国产精品99久久免费黑人 | 国产精品久久久久久久久免费看 | 久久综合给合久久狠狠色 | 黄色精品久久久 | 视频国产精品 | 欧美色图狠狠干 | 黄色av网站在线免费观看 | 欧美有色| 久草在线视频免费资源观看 | 就要干b | 国产精品日韩在线 | 欧美激情xxxx性bbbb | 欧美另类xxx | 国内精品久久久久影院一蜜桃 | 精品久久久久久一区二区里番 | 六月丁香综合网 | 99色婷婷 | 看毛片网站 | 人人爽人人插 | 一区二区三区在线观看中文字幕 | 九九国产视频 | 免费一级特黄毛大片 | 亚洲情感电影大片 | 摸bbb搡bbb搡bbbb | 99色亚洲 | 色偷偷88欧美精品久久久 | 国产精品一区二区免费 | 国产亚洲免费观看 | 国产精品久久久久久久久久直播 | 精品国模一区二区三区 | 国产成人黄色 | 久久精品国产一区二区三区 | 黄色av电影 | 久久精品这里热有精品 | 高清一区二区三区av | 日韩欧美91 | 中文字幕999 | 99久久精品国产系列 | 美女网站在线播放 | 久久99国产精品二区护士 | 999久久a精品合区久久久 | 亚洲成av人影院 | 亚洲乱码精品久久久久 | 伊人影院av| 日韩中文字幕国产精品 | 久久精品99国产国产 | 在线观看日韩精品 | 久久黄色网址 | 国产精品久久久久久一二三四五 | 综合av在线| 四虎国产视频 | 国产亚洲欧美一区 | 久操视频在线观看 | 99视频这里只有 | 亚洲精品视频偷拍 | 可以免费看av| 激情综合网五月婷婷 | 国产黄色精品网站 | 成人黄色大片在线观看 | 色综合天天在线 | 国产黄免费在线观看 | 一级黄色网址 | 亚洲一区二区三区在线看 | 丁香六月婷婷开心 | 亚洲综合视频在线播放 | 久久亚洲精品国产亚洲老地址 | 亚洲综合色丁香婷婷六月图片 | 日韩美女一级片 | 久久精品久久99精品久久 | 999成人国产 | 国产精品99久久久久久大便 | 91福利试看 | 在线免费观看黄 | 欧美成人h版 | 免费精品视频在线观看 | 亚洲国产中文字幕 | 一级成人在线 | 免费观看性生交 | 国精产品999国精产品视频 | 日韩在线观看 | 精品高清美女精品国产区 | 激情久久久久久久久久久久久久久久 | 九九免费在线观看视频 | 国产日韩欧美在线播放 | 91麻豆产精品久久久久久 | av丝袜美腿 | 久久精品国产亚洲精品 | 波多野结衣一区 | 国产午夜影院 | 极品久久久久久久 | 国产高清福利在线 | 在线观看深夜视频 | 香蕉视频91 | 天天射天天操天天 | 日韩城人在线 | 91人人爱| 国产免费又爽又刺激在线观看 | 久久99国产精品久久99 | www.久草视频| www.黄色片.com| 99视频免费观看 | 99久免费精品视频在线观看 | 亚洲无吗视频在线 | av在线免费观看网站 | 人人插人人澡 | 国产精品大片在线观看 | 欧美日韩在线精品一区二区 | 日韩黄色中文字幕 | 国产九色视频在线观看 | 日本最新高清不卡中文字幕 | 日韩在线免费观看视频 | 六月婷操| 最新91在线视频 | 久久综合狠狠综合久久综合88 | 欧美激情综合五月色丁香 | 免费看v片网站 | 热久久精品在线 | 97视频在线观看网址 | 在线观看国产麻豆 | 国产精品亚洲人在线观看 | 最近最新最好看中文视频 | a级成人毛片 | 国产小视频在线免费观看视频 | 色www精品视频在线观看 | 亚洲国产播放 | 久久综合久久综合这里只有精品 | 五月天激情综合网 | 91精品视频在线免费观看 | 欧美男男激情videos | 久久国产精品网站 | 日韩免费在线观看视频 | avhd高清在线谜片 | 亚洲精品中文在线 | 蜜臀精品久久久久久蜜臀 | 亚洲91网站| 久久久久久久久久亚洲精品 | 国产美腿白丝袜足在线av | 久久国产精品免费一区二区三区 | 高清有码中文字幕 | 日韩在线免费不卡 | 国产精品久久久久永久免费观看 | 99视频在线精品国自产拍免费观看 | 久久一视频 | 成人黄色短片 | 99热这里只有精品免费 | 成人黄在线观看 | 最新中文字幕在线资源 | 国产资源在线免费观看 | 欧美大片mv免费 | 中文字幕高清免费日韩视频在线 | 在线免费av播放 | 中文字幕一区二区三区乱码在线 | 亚洲成人黄色网址 | 亚洲精品乱码久久久一二三 | 天天天天色综合 | 免费观看完整版无人区 | 国产一区免费视频 | 亚洲免费国产视频 | 色大片免费看 | 国产乱码精品一区二区蜜臀 | 二区视频在线观看 | 欧美一区二区三区在线观看 | 精品999在线 | 992tv在线观看网站 | 国产精品第二十页 | 夜夜爽88888免费视频4848 | 天天色天天操综合网 | 五月激情久久久 | 色综合久久综合网 | 亚洲激情一区二区三区 | 久久免费国产 | 五月天久久狠狠 | 色综合 久久精品 | 超碰97免费在线 | 免费观看性生交大片3 | 国产精品女主播一区二区三区 | 91在线欧美| 免费av影视 | 手机在线看片日韩 | 国产一级淫片在线观看 | 欧美午夜视频在线 | 午夜精品久久久久久久爽 | 日韩欧美xxxx| 中文字幕永久在线 | 美女视频黄免费的久久 | www.夜夜操 | 夜夜爽夜夜操 | 中文字幕五区 | 丁香高清视频在线看看 | 日本亚洲国产 | 蜜臀av一区二区 | 婷婷伊人综合亚洲综合网 | 国产成人精品一区二区三区免费 | 欧美日韩不卡在线观看 | 久久久精品视频成人 | 亚洲一区网站 | 黄网站免费久久 | 中国精品少妇 | 91亚洲成人| 欧美性生活一级片 | 91视频在线观看免费 | 久久国产精品免费一区二区三区 | 粉嫩一区二区三区粉嫩91 | av亚洲产国偷v产偷v自拍小说 | 久久久久久毛片 | 五月天六月色 | 精品中文字幕在线 | 激情丁香| 亚洲成人av一区 | 久久久伦理| 国产丝袜一区二区三区 | 五月天视频网 | 久久精品电影网 | 国产一二三在线视频 | av在线8| 91新人在线观看 | 国产精品综合av一区二区国产馆 | 亚洲 精品在线视频 | 久久r精品 | 国产精品网站一区二区三区 | 天天操天天插 | 日韩电影在线观看一区二区三区 | 天躁狠狠躁 | 色综合五月天 | 亚洲 欧美日韩 国产 中文 | 久保带人 | 国产理论在线 | 97电影手机版 | 黄色av一级 | 欧美精品久| 免费麻豆 | 天天爱天天操天天干 | 欧美大jb| 天天干视频在线 | 久影院| 美女中文字幕 | 97小视频| 精品国产一区二区三区av性色 | 久久99精品一区二区三区三区 | 免费观看全黄做爰大片国产 | 久久视频这里只有精品 | 成人性生交视频 | 色夜影院 | 九九热只有精品 | 国产最顶级的黄色片在线免费观看 | 手机av网站 | 欧美日韩久久不卡 | 日本中文字幕视频 | 亚洲精品久久久久久中文传媒 | 日韩av在线一区二区 | 日韩在线观看网站 | 成人禁用看黄a在线 | 九九热国产视频 | 日韩有码网站 | 久久精品免费 | www在线免费观看 | 国产精品欧美激情在线观看 | 日韩午夜剧场 | 96看片 | 国产免费一区二区三区网站免费 | 久久久久久久久久久久国产精品 | 国产手机视频精品 | 欧美一级视频免费看 | 91中文字幕 | 日韩精品亚洲专区在线观看 | 99精品一级欧美片免费播放 | 在线观看 国产 | bbw av| 亚洲欧美精品一区二区 | 欧美日韩在线精品一区二区 | 亚洲伊人色 | 亚洲午夜精品一区二区三区电影院 | 五月天综合色激情 | 欧美在线一二 | 在线观看av小说 | 日韩欧美视频 | 色吊丝在线永久观看最新版本 | 免费三级av | 久久久久亚洲精品中文字幕 | 亚洲人久久久 | 伊人国产在线观看 | 免费观看国产精品视频 | 免费视频你懂得 | 亚洲成人一区 | 麻豆视频在线观看 | 免费观看的av网站 | 一本—道久久a久久精品蜜桃 | 国产不卡在线 | 精品国产乱码久久久久久1区2匹 | 在线 视频 一区二区 | 天天爽网站 | 在线欧美最极品的av | 九九热在线免费观看 | 超碰人人乐 | 久久午夜精品视频 | 男女精品久久 | 精品99在线观看 | 久精品视频免费观看2 | 毛片在线播放网址 | 激情婷婷综合 | 欧美日韩高清在线一区 | 四川bbb搡bbb爽爽视频 | 欧美另类性| 国产亚洲精品久久19p | 国产亚洲资源 | 欧美日产在线观看 | 99这里只有精品99 | 四虎www | 婷婷六月中文字幕 | 日韩一区二区三免费高清在线观看 | 激情中文字幕 | 国产九色在线播放九色 | 亚洲精品黄色片 | 黄色av电影在线观看 | 欧美在线你懂的 | 亚州欧美精品 | 丁香激情五月 | 国产精彩视频一区二区 | 亚洲第五色综合网 | 中文字幕在线免费97 | 国产精品 欧美 日韩 | 久久国产网站 | 青青河边草观看完整版高清 | 久久资源在线 | 天天躁日日躁狠狠躁av麻豆 |