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

歡迎訪問 生活随笔!

生活随笔

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

数据库

mysql六:索引原理与慢查询优化

發布時間:2024/4/17 数据库 35 豆豆
生活随笔 收集整理的這篇文章主要介紹了 mysql六:索引原理与慢查询优化 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

一 介紹

為何要有索引?

一般的應用系統,讀寫比例在10:1左右,而且插入操作和一般的更新操作很少出現性能問題,在生產環境中,我們遇到最多的,也是最容易出問題的,還是一些復雜的查詢操作,因此對查詢語句的優化顯然是重中之重。說起加速查詢,就不得不提到索引了。

什么是索引?

索引在MySQL中也叫做“鍵”,是存儲引擎用于快速找到記錄的一種數據結構。索引對于良好的性能
非常關鍵,尤其是當表中的數據量越來越大時,索引對于性能的影響愈發重要。
索引優化應該是對查詢性能優化最有效的手段了。索引能夠輕易將查詢性能提高好幾個數量級。
索引相當于字典的音序表,如果要查某個字,如果不使用音序表,則需要從幾百頁中逐頁去查。

二 索引的原理

一 索引原理

索引的目的在于提高查詢效率,與我們查閱圖書所用的目錄是一個道理:先定位到章,然后定位到該章下的一個小節,然后找到頁數。相似的例子還有:查字典,查火車車次,飛機航班等

本質都是:通過不斷地縮小想要獲取數據的范圍來篩選出最終想要的結果,同時把隨機的事件變成順序的事件,也就是說,有了這種索引機制,我們可以總是用同一種查找方式來鎖定數據。

數據庫也是一樣,但顯然要復雜的多,因為不僅面臨著等值查詢,還有范圍查詢(>、<、between、in)、模糊查詢(like)、并集查詢(or)等等。數據庫應該選擇怎么樣的方式來應對所有的問題呢?我們回想字典的例子,能不能把數據分成段,然后分段查詢呢?最簡單的如果1000條數據,1到100分成第一段,101到200分成第二段,201到300分成第三段......這樣查第250條數據,只要找第三段就可以了,一下子去除了90%的無效數據。但如果是1千萬的記錄呢,分成幾段比較好?稍有算法基礎的同學會想到搜索樹,其平均復雜度是lgN,具有不錯的查詢性能。但這里我們忽略了一個關鍵的問題,復雜度模型是基于每次相同的操作成本來考慮的。而數據庫實現比較復雜,一方面數據是保存在磁盤上的,另外一方面為了提高性能,每次又可以把部分數據讀入內存來計算,因為我們知道訪問磁盤的成本大概是訪問內存的十萬倍左右,所以簡單的搜索樹難以滿足復雜的應用場景。

二 磁盤IO與預讀

前面提到了訪問磁盤,那么這里先簡單介紹一下磁盤IO和預讀,磁盤讀取數據靠的是機械運動,每次讀取數據花費的時間可以分為尋道時間、旋轉延遲、傳輸時間三個部分,尋道時間指的是磁臂移動到指定磁道所需要的時間,主流磁盤一般在5ms以下;旋轉延遲就是我們經常聽說的磁盤轉速,比如一個磁盤7200轉,表示每分鐘能轉7200次,也就是說1秒鐘能轉120次,旋轉延遲就是1/120/2 = 4.17ms;傳輸時間指的是從磁盤讀出或將數據寫入磁盤的時間,一般在零點幾毫秒,相對于前兩個時間可以忽略不計。那么訪問一次磁盤的時間,即一次磁盤IO的時間約等于5+4.17 = 9ms左右,聽起來還挺不錯的,但要知道一臺500 -MIPS(Million Instructions Per Second)的機器每秒可以執行5億條指令,因為指令依靠的是電的性質,換句話說執行一次IO的時間可以執行約450萬條指令,數據庫動輒十萬百萬乃至千萬級數據,每次9毫秒的時間,顯然是個災難。下圖是計算機硬件延遲的對比圖,供大家參考:

?

考慮到磁盤IO是非常高昂的操作,計算機操作系統做了一些優化,當一次IO時,不光把當前磁盤地址的數據,而是把相鄰的數據也都讀取到內存緩沖區內,因為局部預讀性原理告訴我們,當計算機訪問一個地址的數據的時候,與其相鄰的數據也會很快被訪問到。每一次IO讀取的數據我們稱之為一頁(page)。具體一頁有多大數據跟操作系統有關,一般為4k或8k,也就是我們讀取一頁內的數據時候,實際上才發生了一次IO,這個理論對于索引的數據結構設計非常有幫助。

三 索引的數據結構

前面講了索引的基本原理,數據庫的復雜性,又講了操作系統的相關知識,目的就是讓大家了解,任何一種數據結構都不是憑空產生的,一定會有它的背景和使用場景,我們現在總結一下,我們需要這種數據結構能夠做些什么,其實很簡單,那就是:每次查找數據時把磁盤IO次數控制在一個很小的數量級,最好是常數數量級。那么我們就想到如果一個高度可控的多路搜索樹是否能滿足需求呢?就這樣,b+樹應運而生。

如上圖,是一顆b+樹,關于b+樹的定義可以參見B+樹,這里只說一些重點,淺藍色的塊我們稱之為一個磁盤塊,可以看到每個磁盤塊包含幾個數據項(深藍色所示)和指針(黃色所示),如磁盤塊1包含數據項17和35,包含指針P1、P2、P3,P1表示小于17的磁盤塊,P2表示在17和35之間的磁盤塊,P3表示大于35的磁盤塊。真實的數據存在于葉子節點即3、5、9、10、13、15、28、29、36、60、75、79、90、99。非葉子節點只不存儲真實的數據,只存儲指引搜索方向的數據項,如17、35并不真實存在于數據表中。

###b+樹的查找過程
如圖所示,如果要查找數據項29,那么首先會把磁盤塊1由磁盤加載到內存,此時發生一次IO,在內存中用二分查找確定29在17和35之間,鎖定磁盤塊1的P2指針,內存時間因為非常短(相比磁盤的IO)可以忽略不計,通過磁盤塊1的P2指針的磁盤地址把磁盤塊3由磁盤加載到內存,發生第二次IO,29在26和30之間,鎖定磁盤塊3的P2指針,通過指針加載磁盤塊8到內存,發生第三次IO,同時內存中做二分查找找到29,結束查詢,總計三次IO。真實的情況是,3層的b+樹可以表示上百萬的數據,如果上百萬的數據查找只需要三次IO,性能提高將是巨大的,如果沒有索引,每個數據項都要發生一次IO,那么總共需要百萬次的IO,顯然成本非常非常高。

###b+樹性質
1.索引字段要盡量的小:通過上面的分析,我們知道IO次數取決于b+數的高度h,假設當前數據表的數據為N,每個磁盤塊的數據項的數量是m,則有h=㏒(m+1)N,當數據量N一定的情況下,m越大,h越小;而m = 磁盤塊的大小 / 數據項的大小,磁盤塊的大小也就是一個數據頁的大小,是固定的,如果數據項占的空間越小,數據項的數量越多,樹的高度越低。這就是為什么每個數據項,即索引字段要盡量的小,比如int占4字節,要比bigint8字節少一半。這也是為什么b+樹要求把真實的數據放到葉子節點而不是內層節點,一旦放到內層節點,磁盤塊的數據項會大幅度下降,導致樹增高。當數據項等于1時將會退化成線性表。
2.索引的最左匹配特性:當b+樹的數據項是復合的數據結構,比如(name,age,sex)的時候,b+數是按照從左到右的順序來建立搜索樹的,比如當(張三,20,F)這樣的數據來檢索的時候,b+樹會優先比較name來確定下一步的所搜方向,如果name相同再依次比較age和sex,最后得到檢索的數據;但當(20,F)這樣的沒有name的數據來的時候,b+樹就不知道下一步該查哪個節點,因為建立搜索樹的時候name就是第一個比較因子,必須要先根據name來搜索才能知道下一步去哪里查詢。比如當(張三,F)這樣的數據來檢索時,b+樹可以用name來指定搜索方向,但下一個字段age的缺失,所以只能把名字等于張三的數據都找到,然后再匹配性別是F的數據了, 這個是非常重要的性質,即索引的最左匹配特性。

三 MySQL索引管理

一 功能

#1. 索引的功能就是加速查找 #2. mysql中的primary key,unique,聯合唯一也都是索引,這些索引除了加速查找以外,還有約束的功能

二 MySQL的索引分類

普通索引INDEX:加速查找唯一索引:-主鍵索引PRIMARY KEY:加速查找+約束(不為空、不能重復)-唯一索引UNIQUE:加速查找+約束(不能重復)聯合索引:-PRIMARY KEY(id,name):聯合主鍵索引-UNIQUE(id,name):聯合唯一索引-INDEX(id,name):聯合普通索引 舉個例子來說,比如你在為某商場做一個會員卡的系統。這個系統有一個會員表 有下列字段: 會員編號 INT 會員姓名 VARCHAR(10) 會員身份證號碼 VARCHAR(18) 會員電話 VARCHAR(10) 會員住址 VARCHAR(50) 會員備注信息 TEXT那么這個 會員編號,作為主鍵,使用 PRIMARY 會員姓名 如果要建索引的話,那么就是普通的 INDEX 會員身份證號碼 如果要建索引的話,那么可以選擇 UNIQUE (唯一的,不允許重復)#除此之外還有全文索引,即FULLTEXT 會員備注信息 , 如果需要建索引的話,可以選擇全文搜索。 用于搜索很長一篇文章的時候,效果最好。 用在比較短的文本,如果就一兩行字的,普通的 INDEX 也可以。 但其實對于全文搜索,我們并不會使用MySQL自帶的該索引,而是會選擇第三方軟件如Sphinx,專門來做全文搜索。#其他的如空間索引SPATIAL,了解即可,幾乎不用 各個索引的應用場景 View Code

三 索引的兩大類型hash與btree

#我們可以在創建上述索引的時候,為其指定索引類型,分兩類 hash類型的索引:查詢單條快,范圍查詢慢 btree類型的索引:b+樹,層數越多,數據量指數級增長(我們就用它,因為innodb默認支持它)#不同的存儲引擎支持的索引類型也不一樣 InnoDB 支持事務,支持行級別鎖定,支持 B-tree、Full-text 等索引,不支持 Hash 索引; MyISAM 不支持事務,支持表級別鎖定,支持 B-tree、Full-text 等索引,不支持 Hash 索引; Memory 不支持事務,支持表級別鎖定,支持 B-tree、Hash 等索引,不支持 Full-text 索引; NDB 支持事務,支持行級別鎖定,支持 Hash 索引,不支持 B-tree、Full-text 等索引; Archive 不支持事務,支持表級別鎖定,不支持 B-tree、Hash、Full-text 等索引;

四 創建/刪除索引的語法

#方法一:創建表時   CREATE TABLE 表名 (字段名1 數據類型 [完整性約束條件…],字段名2 數據類型 [完整性約束條件…],[UNIQUE | FULLTEXT | SPATIAL ] INDEX | KEY[索引名] (字段名[(長度)] [ASC |DESC]) );#方法二:CREATE在已存在的表上創建索引CREATE [UNIQUE | FULLTEXT | SPATIAL ] INDEX 索引名 ON 表名 (字段名[(長度)] [ASC |DESC]) ;#方法三:ALTER TABLE在已存在的表上創建索引ALTER TABLE 表名 ADD [UNIQUE | FULLTEXT | SPATIAL ] INDEX索引名 (字段名[(長度)] [ASC |DESC]) ;#刪除索引:DROP INDEX 索引名 ON 表名字;

四 測試索引

1 準備

#1. 準備表 create table s1( id int, name varchar(20), gender char(6), email varchar(50) );#2. 創建存儲過程,實現批量插入記錄 delimiter $$ #聲明存儲過程的結束符號為$$ create procedure auto_insert1() BEGINdeclare i int default 1;while(i<3000000)doinsert into s1 values(i,concat('egon',i),'male',concat('egon',i,'@oldboy'));set i=i+1;end while; END$$ #$$結束 delimiter ; #重新聲明分號為結束符號#3. 查看存儲過程 show create procedure auto_insert1\G #4. 調用存儲過程 call auto_insert1();

2 在沒有索引的前提下測試查詢速度

#無索引:mysql根本就不知道到底是否存在id等于333333333的記錄,只能把數據表從頭到尾掃描一遍,此時有多少個磁盤塊就需要進行多少IO操作,所以查詢速度很慢 mysql> select * from s1 where id=333333333; Empty set (0.33 sec)

三 在表中已經存在大量數據的前提下,為某個字段段建立索引,建立速度會很慢

四 在索引建立完畢后,以該字段為查詢條件時,查詢速度提升明顯

PS:

1. mysql先去索引表里根據b+樹的搜索原理很快搜索到id等于333333333的記錄不存在,IO大大降低,因而速度明顯提升

2. 我們可以去mysql的data目錄下找到該表,可以看到占用的硬盤空間多了

3. 需要注意,如下圖

ps:我們可以去mysql的data目錄下找到該表,可以看到占用的硬盤空間多了

?五 總結

#1. 一定是為搜索條件的字段創建索引,比如select * from s1 where id = 333;就需要為id加上索引#2. 在表中已經有大量數據的情況下,建索引會很慢,且占用硬盤空間,建完后查詢速度加快 比如create index idx on s1(id);會掃描表中所有的數據,然后以id為數據項,創建索引結構,存放于硬盤的表中。 建完以后,再查詢就會很快了。#3. 需要注意的是:innodb表的索引會存放于s1.ibd文件中,而myisam表的索引則會有單獨的索引文件table1.MYI MySAM索引文件和數據文件是分離的,索引文件僅保存數據記錄的地址。而在innodb中,表數據文件本身就是按照B+Tree(BTree即Balance True)組織的一個索引結構,這棵樹的葉節點data域保存了完整的數據記錄。這個索引的key是數據表的主鍵,因此innodb表數據文件本身就是主索引。 因為inndob的數據文件要按照主鍵聚集,所以innodb要求表必須要有主鍵(Myisam可以沒有),如果沒有顯式定義,則mysql系統會自動選擇一個可以唯一標識數據記錄的列作為主鍵,如果不存在這種列,則mysql會自動為innodb表生成一個隱含字段作為主鍵,這字段的長度為6個字節,類型為長整型.

?

六 正確使用索引

一 索引未命中

并不是說我們創建了索引就一定會加快查詢速度,若想利用索引達到預想的提高查詢速度的效果,我們在添加索引時,必須遵循以下問題

1 范圍問題,或者說條件不明確,條件中出現這些符號或關鍵字:>、>=、<、<=、!= 、between...and...、like、

大于號、小于號

不等于!=

between ...and...

like

2?盡量選擇區分度高的列作為索引,區分度的公式是count(distinct col)/count(*),表示字段不重復的比例,比例越大我們掃描的記錄數越少,唯一鍵的區分度是1,而一些狀態、性別字段可能在大數據面前區分度就是0,那可能有人會問,這個比例有什么經驗值嗎?使用場景不同,這個值也很難確定,一般需要join的字段我們都要求是0.1以上,即平均1條掃描10條記錄

#先把表中的索引都刪除,讓我們專心研究區分度的問題 mysql> desc s1; +--------+-------------+------+-----+---------+-------+ | Field | Type | Null | Key | Default | Extra | +--------+-------------+------+-----+---------+-------+ | id | int(11) | YES | MUL | NULL | | | name | varchar(20) | YES | | NULL | | | gender | char(5) | YES | | NULL | | | email | varchar(50) | YES | MUL | NULL | | +--------+-------------+------+-----+---------+-------+ rows in set (0.00 sec)mysql> drop index a on s1; Query OK, 0 rows affected (0.20 sec) Records: 0 Duplicates: 0 Warnings: 0mysql> drop index d on s1; Query OK, 0 rows affected (0.18 sec) Records: 0 Duplicates: 0 Warnings: 0mysql> desc s1; +--------+-------------+------+-----+---------+-------+ | Field | Type | Null | Key | Default | Extra | +--------+-------------+------+-----+---------+-------+ | id | int(11) | YES | | NULL | | | name | varchar(20) | YES | | NULL | | | gender | char(5) | YES | | NULL | | | email | varchar(50) | YES | | NULL | | +--------+-------------+------+-----+---------+-------+ rows in set (0.00 sec)#先把表中的索引都刪除,讓我們專心研究區分度的問題

我們編寫存儲過程為表s1批量添加記錄,name字段的值均為egon,也就是說name這個字段的區分度很低(gender字段也是一樣的,我們稍后再搭理它)回憶b+樹的結構,查詢的速度與樹的高度成反比,要想將樹的高低控制的很低,需要保證:在某一層內數據項均是按照從左到右,從小到大的順序依次排開,即左1<左2<左3<...而對于區分度低的字段,無法找到大小關系,因為值都是相等的,毫無疑問,還想要用b+樹存放這些等值的數據,只能增加樹的高度,字段的區分度越低,則樹的高度越高。極端的情況,索引字段的值都一樣,那么b+樹幾乎成了一根棍。本例中就是這種極端的情況,name字段所有的值均為'egon'#現在我們得出一個結論:為區分度低的字段建立索引,索引樹的高度會很高,然而這具體會帶來什么影響呢???#1:如果條件是name='xxxx',那么肯定是可以第一時間判斷出'xxxx'是不在索引樹中的(因為樹中所有的值均為'egon’),所以查詢速度很快#2:如果條件正好是name='egon',查詢時,我們永遠無法從樹的某個位置得到一個明確的范圍,只能往下找,往下找,往下找。。。這與全表掃描的IO次數沒有多大區別,所以速度很慢 分析原因

3?=和in可以亂序,比如a = 1 and b = 2 and c = 3 建立(a,b,c)索引可以任意順序,mysql的查詢優化器會幫你優化成索引可以識別的形式

4?索引列不能參與計算,保持列“干凈”,比如from_unixtime(create_time) = ’2014-05-29’就不能使用到索引,原因很簡單,b+樹中存的都是數據表中的字段值,但進行檢索時,需要把所有元素都應用函數才能比較,顯然成本太大。所以語句應該寫成create_time = unix_timestamp(’2014-05-29’)

5 and/or

#1、and與or的邏輯條件1 and 條件2:所有條件都成立才算成立,但凡要有一個條件不成立則最終結果不成立條件1 or 條件2:只要有一個條件成立則最終結果就成立#2、and的工作原理 條件:a = 10 and b = 'xxx' and c > 3 and d =4索引:制作聯合索引(d,a,b,c)工作原理:對于連續多個and:mysql會按照聯合索引,從左到右的順序找一個區分度高的索引字段(這樣便可以快速鎖定很小的范圍),加速查詢,即按照d—>a->b->c的順序#3、or的工作原理 條件:a = 10 or b = 'xxx' or c > 3 or d =4索引:制作聯合索引(d,a,b,c)工作原理:對于連續多個or:mysql會按照條件的順序,從左到右依次判斷,即a->b->c->d

在左邊條件成立但是索引字段的區分度低的情況下(name與gender均屬于這種情況),會依次往右找到一個區分度高的索引字段,加速查詢

經過分析,在條件為name='egon' and gender='male' and id>333 and email='xxx'的情況下,我們完全沒必要為前三個條件的字段加索引,因為只能用上email字段的索引,前三個字段的索引反而會降低我們的查詢效率

6?最左前綴匹配原則(詳見第八小節),非常重要的原則,對于組合索引mysql會一直向右匹配直到遇到范圍查詢(>、<、between、like)就停止匹配(指的是范圍大了,有索引速度也慢),比如a = 1 and b = 2 and c > 3 and d = 4 如果建立(a,b,c,d)順序的索引,d是用不到索引的,如果建立(a,b,d,c)的索引則都可以用到,a,b,d的順序可以任意調整。

7 其他情況

- 使用函數select * from tb1 where reverse(email) = 'egon';- 類型不一致如果列是字符串類型,傳入條件是必須用引號引起來,不然...select * from tb1 where email = 999;#排序條件為索引,則select字段必須也是索引字段,否則無法命中 - order byselect name from s1 order by email desc;當根據索引排序時候,select查詢的字段如果不是索引,則速度仍然很慢select email from s1 order by email desc;特別的:如果對主鍵排序,則還是速度很快:select * from tb1 order by nid desc;- 組合索引最左前綴如果組合索引為:(name,email)name and email -- 命中索引name -- 命中索引email -- 未命中索引- count(1)或count(列)代替count(*)在mysql中沒有差別了- create index xxxx on tb(title(19)) #text類型,必須制定長度

其他注意事項

- 避免使用select * - count(1)或count(列) 代替 count(*) - 創建表時盡量時 char 代替 varchar - 表的字段順序固定長度的字段優先 - 組合索引代替多個單列索引(經常使用多個條件查詢時) - 盡量使用短索引 - 使用連接(JOIN)來代替子查詢(Sub-Queries) - 連表時注意條件類型需一致 - 索引散列值(重復少)不適合建索引,例:性別不適合

?

?七 聯合索引與覆蓋索引

一 聯合索引

聯合索引時指對表上的多個列合起來做一個索引。聯合索引的創建方法與單個索引的創建方法一樣,不同之處在僅在于有多個索引列,如下

mysql> create table t(-> a int,-> b int,-> primary key(a),-> key idx_a_b(a,b)-> ); Query OK, 0 rows affected (0.11 sec)

?那么何時需要使用聯合索引呢?在討論這個問題之前,先來看一下聯合索引內部的結果。從本質上來說,聯合索引就是一棵B+樹,不同的是聯合索引的鍵值得數量不是1,而是>=2。接著來討論兩個整型列組成的聯合索引,假定兩個鍵值得名稱分別為a、b如圖

?

可以看到這與我們之前看到的單個鍵的B+樹并沒有什么不同,鍵值都是排序的,通過葉子結點可以邏輯上順序地讀出所有數據,就上面的例子來說,即(1,1),(1,2),(2,1),(2,4),(3,1),(3,2),數據按(a,b)的順序進行了存放。

因此,對于查詢select * from table where a=xxx and b=xxx, 顯然是可以使用(a,b) 這個聯合索引的,對于單個列a的查詢select * from table where a=xxx,也是可以使用(a,b)這個索引的。

但對于b列的查詢select * from table where b=xxx,則不可以使用(a,b) 索引,其實你不難發現原因,葉子節點上b的值為1、2、1、4、1、2顯然不是排序的,因此對于b列的查詢使用不到(a,b) 索引

聯合索引的第二個好處是在第一個鍵相同的情況下,已經對第二個鍵進行了排序處理,例如在很多情況下應用程序都需要查詢某個用戶的購物情況,并按照時間進行排序,最后取出最近三次的購買記錄,這時使用聯合索引可以幫我們避免多一次的排序操作,因為索引本身在葉子節點已經排序了,如下

#===========準備表============== create table buy_log(userid int unsigned not null,buy_date date );insert into buy_log values (1,'2009-01-01'), (2,'2009-01-01'), (3,'2009-01-01'), (1,'2009-02-01'), (3,'2009-02-01'), (1,'2009-03-01'), (1,'2009-04-01');alter table buy_log add key(userid); alter table buy_log add key(userid,buy_date);#===========驗證============== mysql> show create table buy_log; | buy_log | CREATE TABLE `buy_log` (`userid` int(10) unsigned NOT NULL,`buy_date` date DEFAULT NULL,KEY `userid` (`userid`),KEY `userid_2` (`userid`,`buy_date`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8 |#可以看到possible_keys在這里有兩個索引可以用,分別是單個索引userid與聯合索引userid_2,但是優化器最終選擇了使用的key是userid因為該索引的葉子節點包含單個鍵值,所以理論上一個頁能存放的記錄應該更多 mysql> explain select * from buy_log where userid=2; +----+-------------+---------+------+-----------------+--------+---------+-------+------+-------+ | id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra | +----+-------------+---------+------+-----------------+--------+---------+-------+------+-------+ | 1 | SIMPLE | buy_log | ref | userid,userid_2 | userid | 4 | const | 1 | | +----+-------------+---------+------+-----------------+--------+---------+-------+------+-------+ row in set (0.00 sec)#接著假定要取出userid為1的最近3次的購買記錄,用的就是聯合索引userid_2了,因為在這個索引中,在userid=1的情況下,buy_date都已經排序好了 mysql> explain select * from buy_log where userid=1 order by buy_date desc limit 3; +----+-------------+---------+------+-----------------+----------+---------+-------+------+--------------------------+ | id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra | +----+-------------+---------+------+-----------------+----------+---------+-------+------+--------------------------+ | 1 | SIMPLE | buy_log | ref | userid,userid_2 | userid_2 | 4 | const | 4 | Using where; Using index | +----+-------------+---------+------+-----------------+----------+---------+-------+------+--------------------------+ row in set (0.00 sec)#ps:如果extra的排序顯示是Using filesort,則意味著在查出數據后需要二次排序#對于聯合索引(a,b),下述語句可以直接使用該索引,無需二次排序 select ... from table where a=xxx order by b;#然后對于聯合索引(a,b,c)來首,下列語句同樣可以直接通過索引得到結果 select ... from table where a=xxx order by b; select ... from table where a=xxx and b=xxx order by c;#但是對于聯合索引(a,b,c),下列語句不能通過索引直接得到結果,還需要自己執行一次filesort操作,因為索引(a,c)并未排序 select ... from table where a=xxx order by c; View Code

二 覆蓋索引

InnoDB存儲引擎支持覆蓋索引(covering index,或稱索引覆蓋),即從輔助索引中就可以得到查詢記錄,而不需要查詢聚集索引中的記錄。

使用覆蓋索引的一個好處是:輔助索引不包含整行記錄的所有信息,故其大小要遠小于聚集索引,因此可以減少大量的IO操作


?注意:覆蓋索引技術最早是在InnoDB Plugin中完成并實現,這意味著對于InnoDB版本小于1.0的,或者MySQL數據庫版本為5.0以下的,InnoDB存儲引擎不支持覆蓋索引特性


對于InnoDB存儲引擎的輔助索引而言,由于其包含了主鍵信息,因此其葉子節點存放的數據為(primary key1,priamey key2,...,key1,key2,...)。例如

select age from s1 where id=123 and name = 'egon'; #id字段有索引,但是name字段沒有索引,該sql命中了索引,但未覆蓋,需要去聚集索引中再查找詳細信息。 最牛逼的情況是,索引字段覆蓋了所有,那全程通過索引來加速查詢以及獲取結果就ok了 mysql> desc s1; +--------+-------------+------+-----+---------+-------+ | Field | Type | Null | Key | Default | Extra | +--------+-------------+------+-----+---------+-------+ | id | int(11) | NO | | NULL | | | name | varchar(20) | YES | | NULL | | | gender | char(6) | YES | | NULL | | | email | varchar(50) | YES | | NULL | | +--------+-------------+------+-----+---------+-------+ rows in set (0.21 sec)mysql> explain select name from s1 where id=1000; #沒有任何索引 +----+-------------+-------+------------+------+---------------+------+---------+------+---------+----------+-------------+ | id | select_type | table | partitions | type | possible_keys | key | key_len | ref | rows | filtered | Extra | +----+-------------+-------+------------+------+---------------+------+---------+------+---------+----------+-------------+ | 1 | SIMPLE | s1 | NULL | ALL | NULL | NULL | NULL | NULL | 2688336 | 10.00 | Using where | +----+-------------+-------+------------+------+---------------+------+---------+------+---------+----------+-------------+ row in set, 1 warning (0.00 sec)mysql> create index idx_id on s1(id); #創建索引 Query OK, 0 rows affected (4.16 sec) Records: 0 Duplicates: 0 Warnings: 0mysql> explain select name from s1 where id=1000; #命中輔助索引,但是未覆蓋索引,還需要從聚集索引中查找name +----+-------------+-------+------------+------+---------------+--------+---------+-------+------+----------+-------+ | id | select_type | table | partitions | type | possible_keys | key | key_len | ref | rows | filtered | Extra | +----+-------------+-------+------------+------+---------------+--------+---------+-------+------+----------+-------+ | 1 | SIMPLE | s1 | NULL | ref | idx_id | idx_id | 4 | const | 1 | 100.00 | NULL | +----+-------------+-------+------------+------+---------------+--------+---------+-------+------+----------+-------+ row in set, 1 warning (0.08 sec)mysql> explain select id from s1 where id=1000; #在輔助索引中就找到了全部信息,Using index代表覆蓋索引 +----+-------------+-------+------------+------+---------------+--------+---------+-------+------+----------+-------------+ | id | select_type | table | partitions | type | possible_keys | key | key_len | ref | rows | filtered | Extra | +----+-------------+-------+------------+------+---------------+--------+---------+-------+------+----------+-------------+ | 1 | SIMPLE | s1 | NULL | ref | idx_id | idx_id | 4 | const | 1 | 100.00 | Using index | +----+-------------+-------+------------+------+---------------+--------+---------+-------+------+----------+-------------+ row in set, 1 warning (0.03 sec)

覆蓋索引的另外一個好處是對某些統計問題而言的。基于上一小結創建的表buy_log,查詢計劃如下

mysql> explain select count(*) from buy_log; +----+-------------+---------+-------+---------------+--------+---------+------+------+-------------+ | id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra | +----+-------------+---------+-------+---------------+--------+---------+------+------+-------------+ | 1 | SIMPLE | buy_log | index | NULL | userid | 4 | NULL | 7 | Using index | +----+-------------+---------+-------+---------------+--------+---------+------+------+-------------+ row in set (0.00 sec)

innodb存儲引擎并不會選擇通過查詢聚集索引來進行統計。由于buy_log表有輔助索引,而輔助索引遠小于聚集索引,選擇輔助索引可以減少IO操作,故優化器的選擇如上key為userid輔助索引

對于(a,b)形式的聯合索引,一般是不可以選擇b中所謂的查詢條件。但如果是統計操作,并且是覆蓋索引,則優化器還是會選擇使用該索引,如下

#聯合索引userid_2(userid,buy_date),一般情況,我們按照buy_date是無法使用該索引的,但特殊情況下:查詢語句是統計操作,且是覆蓋索引,則按照buy_date當做查詢條件時,也可以使用該聯合索引 mysql> explain select count(*) from buy_log where buy_date >= '2011-01-01' and buy_date < '2011-02-01'; +----+-------------+---------+-------+---------------+----------+---------+------+------+--------------------------+ | id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra | +----+-------------+---------+-------+---------------+----------+---------+------+------+--------------------------+ | 1 | SIMPLE | buy_log | index | NULL | userid_2 | 8 | NULL | 7 | Using where; Using index | +----+-------------+---------+-------+---------------+----------+---------+------+------+--------------------------+ row in set (0.00 sec)

?

?

八 查詢優化神器-explain

關于explain命令相信大家并不陌生,具體用法和字段含義可以參考官網explain-output,這里需要強調rows是核心指標,絕大部分rows小的語句執行一定很快(有例外,下面會講到)。所以優化語句基本上都是在優化rows。

執行計劃:讓mysql預估執行操作(一般正確)all < index < range < index_merge < ref_or_null < ref < eq_ref < system/constid,email慢:select * from userinfo3 where name='alex'explain select * from userinfo3 where name='alex'type: ALL(全表掃描)select * from userinfo3 limit 1;快:select * from userinfo3 where email='alex'type: const(走索引)

http://blog.itpub.net/29773961/viewspace-1767044/

?

七 慢查詢優化的基本步驟

0.先運行看看是否真的很慢,注意設置SQL_NO_CACHE 1.where條件單表查,鎖定最小返回記錄表。這句話的意思是把查詢語句的where都應用到表中返回的記錄數最小的表開始查起,單表每個字段分別查詢,看哪個字段的區分度最高 2.explain查看執行計劃,是否與1預期一致(從鎖定記錄較少的表開始查詢) 3.order by limit 形式的sql語句讓排序的表優先查 4.了解業務方使用場景 5.加索引時參照建索引的幾大原則 6.觀察結果,不符合預期繼續從0分析

八 慢日志管理

慢日志- 執行時間 > 10- 未命中索引- 日志文件路徑配置:- 內存show variables like '%query%';show variables like '%queries%';set global 變量名 =- 配置文件mysqld --defaults-file='E:\wupeiqi\mysql-5.7.16-winx64\mysql-5.7.16-winx64\my-default.ini'my.conf內容:slow_query_log = ONslow_query_log_file = D:/....注意:修改配置文件之后,需要重啟服務 MySQL日志管理 ======================================================== 錯誤日志: 記錄 MySQL 服務器啟動、關閉及運行錯誤等信息 二進制日志: 又稱binlog日志,以二進制文件的方式記錄數據庫中除 SELECT 以外的操作 查詢日志: 記錄查詢的信息 慢查詢日志: 記錄執行時間超過指定時間的操作 中繼日志: 備庫將主庫的二進制日志復制到自己的中繼日志中,從而在本地進行重放 通用日志: 審計哪個賬號、在哪個時段、做了哪些事件 事務日志或稱redo日志: 記錄Innodb事務相關的如事務執行時間、檢查點等 ======================================================== 一、bin-log 1. 啟用 # vim /etc/my.cnf [mysqld] log-bin[=dir\[filename]] # service mysqld restart 2. 暫停 //僅當前會話 SET SQL_LOG_BIN=0; SET SQL_LOG_BIN=1; 3. 查看 查看全部: # mysqlbinlog mysql.000002 按時間: # mysqlbinlog mysql.000002 --start-datetime="2012-12-05 10:02:56" # mysqlbinlog mysql.000002 --stop-datetime="2012-12-05 11:02:54" # mysqlbinlog mysql.000002 --start-datetime="2012-12-05 10:02:56" --stop-datetime="2012-12-05 11:02:54" 按字節數: # mysqlbinlog mysql.000002 --start-position=260 # mysqlbinlog mysql.000002 --stop-position=260 # mysqlbinlog mysql.000002 --start-position=260 --stop-position=930 4. 截斷bin-log(產生新的bin-log文件) a. 重啟mysql服務器 b. # mysql -uroot -p123 -e 'flush logs' 5. 刪除bin-log文件 # mysql -uroot -p123 -e 'reset master' 二、查詢日志 啟用通用查詢日志 # vim /etc/my.cnf [mysqld] log[=dir\[filename]] # service mysqld restart 三、慢查詢日志 啟用慢查詢日志 # vim /etc/my.cnf [mysqld] log-slow-queries[=dir\[filename]] long_query_time=n # service mysqld restart MySQL 5.6: slow-query-log=1 slow-query-log-file=slow.log long_query_time=3 查看慢查詢日志 測試:BENCHMARK(count,expr) SELECT BENCHMARK(50000000,2*3);日志管理

九 參考博客

https://tech.meituan.com/mysql-index.html?

http://blog.itpub.net/29773961/viewspace-1767044/
http://www.cnblogs.com/wupeiqi/articles/5716963.html

http://www.cnblogs.com/hustcat/archive/2009/10/28/1591648.html
http://www.cnblogs.com/mr-wid/archive/2013/05/09/3068229.html
http://www.cnblogs.com/kissdodog/p/4159176.html
http://blog.csdn.net/ggxxkkll/article/details/7551766
http://blog.itpub.net/26435490/viewspace-1133659/
http://pymysql.readthedocs.io/en/latest/user/examples.html
http://www.cnblogs.com/lyhabc/p/3793524.html
http://www.jianshu.com/p/ed32d69383d2
http://doc.mysql.cn/mysql5/refman-5.1-zh.html-chapter/
http://doc.mysql.cn/
http://www.php100.com/html/webkaifa/database/Mysql/2013/0316/12223.html
http://blog.csdn.net/ltylove2007/article/details/21084809
http://lib.csdn.net/base/mysql
http://blog.csdn.net/c_enhui/article/details/9021271
http://www.cnblogs.com/edisonchou/p/3878135.html?utm_source=tuicool&utm_medium=referral
http://www.cnblogs.com/ggjucheng/archive/2012/11/11/2765465.html
http://www.cnblogs.com/cchust/p/3444510.html
http://www.docin.com/p-705091183.html
http://www.open-open.com/doc/view/51f552745f514bbbaf0aaecf6c88509a
http://www.open-open.com/doc/view/f80947a5c805458db8cf929834d241bf
http://www.open-open.com/lib/view/open1435498096607.html
http://www.open-open.com/doc/view/48c510607ab84fd8b87b158c3fe9d177
http://www.open-open.com/lib/view/open1448032294072.html
http://www.open-open.com/lib/view/open1404887901263.html
http://www.cnblogs.com/cchust/p/3426927.html
http://wribao.php230.com/category/news/1138254.html
http://www.iqiyi.com/w_19rqqds1ut.html
http://wenku.baidu.com/link?url=7Grxv0cQ_a00Ni2ZEU_cbDk2Wd2VTzlnS2UPKST3OF4oDqoLUQ2rQpOmK8ap12RDnXbnNs6gbY8DXVvWmo9bMxjWGS_vkhYus22ghAZYuES
http://www.cnblogs.com/edisonchou/p/3878135.html
http://blog.chinaunix.net/uid-540802-id-3419311.html
http://my.oschina.net/scipio/blog/293052
http://blog.itpub.net/29773961/viewspace-1767044/
http://my.oschina.net/lionets/blog/407263

?

轉載于:https://www.cnblogs.com/ctztake/p/7512804.html

總結

以上是生活随笔為你收集整理的mysql六:索引原理与慢查询优化的全部內容,希望文章能夠幫你解決所遇到的問題。

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

久久黄色小说视频 | 九草在线视频 | 涩涩色亚洲一区 | 日韩二区三区在线观看 | 免费av在线网 | www.99av| 国产精品涩涩屋www在线观看 | 色综合久久久久久久久五月 | 日韩精品视 | 狠狠色丁香婷婷综合欧美 | 在线观看精品黄av片免费 | www久草| 狠狠色伊人亚洲综合网站野外 | 久久9视频 | 丰满少妇在线观看 | 久久超碰免费 | 婷婷久久一区 | 在线成人性视频 | 免费看黄视频 | 97免费在线观看视频 | 97成人在线免费视频 | 亚洲视频在线观看网站 | 免费男女网站 | 久久午夜鲁丝片 | 日韩高清一二区 | av黄色免费在线观看 | 久久你懂的| 极品久久久 | 在线观看视频91 | 日韩在线一区二区免费 | 亚洲香蕉视频 | 91精品欧美| 日韩在线观看网址 | 五月视频 | 天天干天天干天天色 | 天天操天操 | aaa日本高清在线播放免费观看 | 国产精品亚 | av电影不卡在线 | 在线观看黄a | 日本三级香港三级人妇99 | 亚州精品天堂中文字幕 | 国产手机视频 | 欧美日韩不卡在线观看 | 国产99久久久欧美黑人 | 久草在线视频网站 | 黄色www | 玖玖玖国产精品 | 色网站视频 | 国产在线传媒 | 久久精品视频在线免费观看 | 中文字幕在线观看三区 | 国产剧情一区二区在线观看 | 成人网页在线免费观看 | 国产我不卡| 91在线视频网址 | 国产亚洲人成网站在线观看 | 又长又大又黑又粗欧美 | 在线国产能看的 | 国产精品九九久久99视频 | 91精品无人成人www | 青春草视频 | 国产一区不卡在线 | 999久久精品 | 九九视频在线观看视频6 | 亚洲激情小视频 | 久久黄色影院 | 又黄又爽又刺激视频 | 久久久久亚洲精品成人网小说 | 免费的国产精品 | 亚洲在线精品视频 | 久久 在线 | 中文字幕 欧美性 | 久久成年人 | 中文字幕在线不卡国产视频 | 96超碰在线| 色妞色视频一区二区三区四区 | 麻豆播放| 91av手机在线观看 | 成人a免费视频 | 亚洲综合在线一区二区三区 | 91麻豆.com| 欧美三级免费 | 91av社区| 国产一区二区在线影院 | 9久久精品 | 在线观看成人一级片 | 国产欧美综合视频 | 美女天天操| 久久y | 精品国产一区二区久久 | 亚洲精品自拍 | 国产麻豆传媒 | 国产清纯在线 | 国产亚洲综合精品 | 国产视频在线观看免费 | 日韩一区精品 | 色婷婷综合久久久中文字幕 | 日韩电影一区二区三区在线观看 | 国产视频精品在线 | 九九精品视频在线 | 欧美性久久久 | 精品一区二区在线免费观看 | 五月婷婷丁香六月 | 开心色插 | 一级性生活片 | 日韩在线观看一区 | 国产999精品久久久影片官网 | 国产免费又黄又爽 | 亚洲另类交 | 精品99在线观看 | 久久久噜噜噜久久久 | av在线激情| 日韩啪啪小视频 | avsex| 青青河边草观看完整版高清 | 激情综合色综合久久综合 | 一级特黄av| 一区二区三区四区在线免费观看 | 亚洲激情在线播放 | 又紧又大又爽精品一区二区 | 日韩av免费观看网站 | 精品xxx| www.国产毛片 | 久草久草在线 | 亚洲资源在线观看 | 欧美精品一区二区三区四区在线 | 国产精品毛片久久久久久久 | 伊人久久影视 | 2019av在线视频 | 麻豆视频在线 | 国产第一页福利影院 | 超碰在线观看99 | 黄p网站在线观看 | 免费视频在线观看网站 | 国产亚洲精品久久久久久久久久 | 中文字幕在线观看91 | 波多野结衣一区二区三区中文字幕 | 天天躁天天狠天天透 | 亚洲成aⅴ人片久久青草影院 | h视频在线看 | www日日| av在线免费网 | 久久综合桃花 | 亚洲闷骚少妇在线观看网站 | 女人高潮一级片 | 草久电影 | 国产精品96久久久久久吹潮 | 天天操夜夜操国产精品 | 久久av中文字幕片 | 毛片网在线 | 人人添人人澡人人澡人人人爽 | 国产婷婷久久 | 国产人成免费视频 | 亚洲国产欧美在线人成大黄瓜 | 五月婷婷毛片 | 免费情缘| 欧美国产日韩在线视频 | 三级动态视频在线观看 | 最近中文字幕在线播放 | www黄色软件 | 五月婷香 | 日韩中文字幕视频在线观看 | 成人毛片在线观看视频 | 欧美成人xxxxxxxx | 一区二区三区免费在线观看视频 | 久久不射网站 | 日韩在观看线 | 在线免费黄色av | 亚洲欧洲成人精品av97 | 国产精品久久久久久久久久久久午夜片 | 色婷婷综合久久久久 | 玖草影院 | 国产福利精品视频 | 西西www4444大胆视频 | 国产日韩欧美在线观看视频 | 亚洲砖区区免费 | 国产黄色观看 | 午夜av网站| 中文字幕电影网 | 精品一区在线 | 免费在线国产精品 | 热久久免费视频精品 | 2024国产精品视频 | av高清在线观看 | 国产午夜一区 | 97日日碰人人模人人澡分享吧 | av在线亚洲天堂 | 日韩视频一区二区三区 | 免费黄av| 亚洲综合视频网 | 四虎成人在线 | 国产精品99久久久久久大便 | 久久久婷 | 久久美女视频 | av免费在线网 | 成人91在线观看 | 中国成人一区 | 99中文字幕 | 免费在线精品视频 | 久久99精品国产一区二区三区 | 伊人天天干 | 97国产电影 | 91成人黄色| 亚洲男人天堂2018 | 九九在线视频免费观看 | 成人精品视频久久久久 | 国产成人333kkk| 综合天堂av久久久久久久 | 久久视频二区 | 在线 国产 日韩 | 国产日产高清dvd碟片 | 久草在线免费资源 | 国产伦精品一区二区三区… | 成人一区在线观看 | 成年人免费av | 国产一级久久 | 99 色| 国产精品久久久久久久久久新婚 | 色鬼综合网 | 国产精品久久久久久久免费大片 | 97国产超碰在线 | 国内免费的中文字幕 | 久久婷婷影视 | 天天天天天天天天操 | 成人免费在线网 | 日韩一级电影网站 | av电影免费观看 | www.狠狠色.com | 亚洲无在线 | 91中文在线观看 | 国产精品一码二码三码在线 | 99视频在线精品免费观看2 | 久久久综合香蕉尹人综合网 | 中文字幕色在线视频 | 午夜的福利 | 久久97超碰 | 蜜臀av性久久久久蜜臀aⅴ四虎 | 成人黄在线 | 射九九| 国产一线在线 | 国产乱码精品一区二区蜜臀 | 国产精品1区 | 国产日本亚洲高清 | 98福利在线 | 久久久91精品国产一区二区精品 | 日韩精品一区二区三区丰满 | 六月色婷| 日本久久综合网 | 日韩精品亚洲专区在线观看 | 成人黄色毛片 | 一区二区激情视频 | 日韩精品中文字幕在线 | 亚洲精品成人在线 | 碰超在线 | 久久高视频 | 久草在线视频中文 | 色网站在线免费观看 | 久久性生活片 | 九九热99视频 | 日韩av中文 | 五月综合色婷婷 | 中文字幕第一页在线播放 | 久久久国产精品成人免费 | 色中色亚洲 | 91九色蝌蚪视频在线 | 成片视频免费观看 | 美女视频久久黄 | 最新av免费在线观看 | 欧美一区二区精美视频 | 亚洲成人av片| 久久婷综合 | 91精品一区二区三区蜜臀 | 亚洲午夜久久久久 | 欧美激情综合五月色丁香 | 中文字幕 欧美性 | 91大神免费在线观看 | 狠狠干成人 | 少妇做爰k8经典 | 日韩激情三级 | 亚洲国产精品日韩 | 欧美福利视频一区 | 成人免费在线播放 | 99国产一区二区三精品乱码 | 激情自拍av | 97爱| av电影中文字幕 | 欧美精品在线视频观看 | 亚洲经典视频在线观看 | 亚洲精品乱码久久久久久蜜桃91 | 国产三级视频在线 | 综合天天网 | 免费国产在线观看 | 国产成人精品午夜在线播放 | 国产视频美女 | 天天摸天天舔 | 国产精品18毛片一区二区 | 天天干一干 | 99在线国产 | 在线观看视频福利 | 国产日产精品久久久久快鸭 | www.夜夜草 | 欧美精品在线观看 | zzijzzij日本成熟少妇 | 国产尤物在线 | 国产精品麻豆99久久久久久 | 综合色狠狠 | 国产一二三区av | 五月婷在线观看 | 伊人久久一区 | 久久精品99国产国产 | 日b视频在线观看网址 | 在线日本看片免费人成视久网 | 岛国av在线不卡 | 久久黄色免费视频 | 亚洲国产精品99久久久久久久久 | av观看免费在线 | 欧美黄色免费 | 久久国产午夜精品理论片最新版本 | 毛片网站免费 | 成人午夜免费福利 | 国产在线不卡精品 | av中文字幕日韩 | 成人片在线播放 | 国产 日韩 欧美 在线 | 亚洲人成免费网站 | 国产美女久久 | 91专区在线观看 | 久久久黄色av | 天天激情站 | 黄色av电影 | 九九九在线观看视频 | 日韩免费高清在线观看 | 国产资源站| av福利免费 | 亚洲精品一区二区久 | 久久九九国产视频 | 18久久久久 | 91激情视频在线观看 | 在线观看视频在线 | 视频高清| 伊人五月天 | 国产一级久久久 | 欧美日韩一区二区免费在线观看 | 久久国产精品视频免费看 | 99国产情侣在线播放 | 99国产精品久久久久久久久久 | 亚洲最新av在线网站 | 日韩电影在线观看一区二区三区 | 久久国际影院 | 特级毛片在线免费观看 | 91麻豆国产福利在线观看 | 婷婷六月中文字幕 | 91精品国产三级a在线观看 | 国产一区高清在线 | 欧美日性视频 | 人人草网站 | 日韩毛片在线免费观看 | 网站免费黄 | 在线蜜桃视频 | 国产精品丝袜久久久久久久不卡 | 五月婷婷综合色拍 | 欧美国产亚洲精品久久久8v | 婷婷亚洲五月 | 欧美在线1 | 国产福利小视频在线 | 91日韩在线专区 | 成人在线视频一区 | 福利视频网址 | 91精品视频在线免费观看 | 久久tv视频 | 免费成人在线观看视频 | 国产亚洲精品久久久久久大师 | 日日夜夜干 | 黄色www免费| 欧美一区二区在线看 | 色亚洲网| 色综合久久精品 | 日日添夜夜添 | 2019中文最近的2019中文在线 | 在线观看视频黄 | 国产黄视频在线观看 | 欧美黄色软件 | av成人在线播放 | 久草久| 国产一二区在线观看 | 开心色婷婷 | 国产91大片 | 亚洲欧洲精品久久 | 91久久偷偷做嫩草影院 | 久久精品久久精品 | 中文在线免费观看 | 日韩电影在线观看中文字幕 | 超级碰碰碰碰 | 欧美a免费| www.777奇米| 99热这里有 | 国产精品大全 | 久艹在线观看视频 | 在线中文字幕一区二区 | 国产黄色片网站 | avlulu久久精品 | 久久婷婷国产色一区二区三区 | 久久这里精品视频 | 偷拍区另类综合在线 | 日本久久久久久久久久 | 亚洲黄色av网址 | 久久免费视频这里只有精品 | 久草影视在线观看 | 91免费高清视频 | 久草剧场 | 国产精品久久久久av福利动漫 | 黄色大片中国 | 日韩av中文字幕在线免费观看 | 99久久久久久久久久 | 99精品国产一区二区三区麻豆 | av高清免费在线 | 久久久久免费精品国产 | 免费在线观看91 | 国产精品成人自产拍在线观看 | 国产麻豆视频 | 免费视频在线观看网站 | 精品在线一区二区三区 | 国产香蕉视频在线播放 | 天天干天天爽 | 亚洲japanese制服美女 | 国产探花 | 成 人 a v天堂 | 国产你懂的在线 | 午夜精品一区二区国产 | 99精品欧美一区二区蜜桃免费 | 麻豆一二| 精品国产乱码久久久久久1区二区 | 天天爽天天做 | 日本久草电影 | 欧美一区二区日韩一区二区 | 99久久精| 亚洲成年人免费网站 | 久久综合狠狠综合久久狠狠色综合 | 欧美日韩成人 | 日韩欧美高清视频在线观看 | 在线观看黄网站 | 九九热免费在线观看 | 五月天国产 | 蜜桃av观看 | 亚洲精品乱码久久久久久9色 | 久久久999精品视频 国产美女免费观看 | 日韩资源在线播放 | 人人爽人人乐 | 国产精品男女视频 | 久草在 | 久久在现视频 | 久久福利剧场 | 日韩三级视频在线观看 | 亚洲丁香日韩 | www.久久久.cum | 中文字幕在线观看完整版电影 | 国内久久久 | 日韩免费电影网站 | 99精品视频观看 | 日韩视频免费在线观看 | 国产精品久久久久久久久婷婷 | 国产高清区 | 久久久免费观看完整版 | 成人97视频一区二区 | 日韩欧美在线综合网 | 日韩精品中文字幕在线观看 | 欧美亚洲成人xxx | 国产黄色精品网站 | 国产精品美女免费 | 国产美女精品久久久 | 久久伊人八月婷婷综合激情 | 国产精品手机在线观看 | 中文字幕第一 | 日韩欧美一区二区三区黑寡妇 | 韩日电影在线观看 | 国产精品福利在线观看 | 亚洲精品国产精品国自产观看浪潮 | 精品国产成人在线 | 国产老太婆免费交性大片 | 人人干干人人 | 精品99免费视频 | 久久国产片 | 夜夜干夜夜 | 国产精品久久久久久久久久久久午夜 | 久久99久久精品国产 | 美女网站视频免费都是黄 | 亚洲作爱 | 91在线视频观看免费 | 中文字幕在线成人 | 亚洲国产中文字幕在线视频综合 | 亚洲精品动漫在线 | 99热在线网站 | 一区二区三区在线观看免费 | 久草在线观看视频免费 | 91视频在线国产 | 精品一区二区久久久久久久网站 | 不卡的av | 欧美日韩国产精品一区二区 | 欧美日韩xxxxx| 亚洲视频一 | 91精品视频在线观看免费 | 国产视频精品网 | 亚洲欧洲精品一区二区精品久久久 | 亚洲精品9 | 免费视频久久久 | 久久久久女教师免费一区 | 五月婷婷丁香网 | 中文字幕免费观看 | 久久婷婷一区二区三区 | 欧美精品免费在线 | 国产精品国产自产拍高清av | 免费看的视频 | 国产一区二区视频在线播放 | 亚洲最大av | 男女视频久久久 | 少妇搡bbbb搡bbb搡69 | 婷婷在线色 | 欧美精彩视频在线观看 | 亚洲激情网站免费观看 | 国产欧美日韩视频 | 制服丝袜成人在线 | 五月天免费网站 | 九九免费视频 | 日韩 在线a| 久久国产成人午夜av影院潦草 | 香蕉久久久久久av成人 | 91精品欧美一区二区三区 | 在线观看片 | 二区三区毛片 | 91av原创| 欧美性做爰猛烈叫床潮 | 在线免费av电影 | 久久综合桃花 | 91九色精品女同系列 | 欧美精品免费在线 | 一区二区三区四区五区在线 | 日韩精品免费一区二区三区 | 亚洲无线视频 | 亚洲成人家庭影院 | 超碰在线色 | 久久一区二| 久久成熟 | 伊人精品在线 | 一区二区三区日韩视频在线观看 | 国产精品中文在线 | 韩国精品视频在线观看 | 精品产品国产在线不卡 | 日本激情视频中文字幕 | 高潮久久久 | 欧美综合久久久 | 久久污视频 | 日日爱999 | 91精品国产九九九久久久亚洲 | 日韩中文字幕在线 | 91丨九色丨国产在线 | 国产伦精品一区二区三区照片91 | 日本中文在线 | 精品国产色 | 色综合天天色综合 | 亚洲精品乱码久久久久久写真 | 亚洲国产免费网站 | 成人黄色片免费 | 一级黄色在线视频 | 久草在| 粉嫩一二三区 | 色香天天| 日本高清xxxx | 在线国产片 | 欧美午夜性生活 | 色天天中文 | 丁香婷婷色 | 综合久久一本 | 91av电影在线| 成人h电影 | 久久国内免费视频 | 日韩精品在线免费播放 | 伊甸园永久入口www 99热 精品在线 | 久久99久国产精品黄毛片入口 | 奇米777777| 在线成人一区 | 国产精品资源在线 | a v在线观看 | 一区二区三区四区精品 | 99久久精品免费看国产免费软件 | 国产原创中文在线 | 亚洲精品视频免费在线观看 | 久久精品99国产精品日本 | 欧美国产高清 | 欧美日韩一区二区三区不卡 | 国产最新在线观看 | 色偷偷88欧美精品久久久 | 狠狠色丁香婷婷综合视频 | 在线国产福利 | av在线进入 | 成人理论在线观看 | 99在线视频播放 | 91视频-88av | 婷婷香蕉 | 97精品国产97久久久久久免费 | 激情欧美一区二区三区免费看 | 国产成人黄色在线 | av亚洲产国偷v产偷v自拍小说 | 一级做a视频 | 久久国产精品免费视频 | 91一区二区三区在线观看 | 91九色视频观看 | 国产在线精品国自产拍影院 | 免费日韩 精品中文字幕视频在线 | 久久国产精品99久久久久久进口 | 成人在线观看你懂的 | 欧美日韩久久一区 | 国产精品观看在线亚洲人成网 | 日韩精品高清视频 | 亚洲高清视频一区二区三区 | 97超碰资源网 | 久草观看视频 | 91在线免费播放 | www178ccom视频在线 | 日韩欧美视频免费在线观看 | 91精品国产综合久久久久久久 | 五月婷婷狠狠 | 狠狠操导航| 91在线观看视频 | 国产专区在线 | 四虎免费av | 97成人免费视频 | 在线观看的av | 久久性生活片 | 国产特级毛片aaaaaa高清 | 97超碰国产在线 | 中文字幕一区二区在线播放 | av网址最新 | 天天摸天天操天天爽 | 天天舔夜夜操 | 亚洲综合成人婷婷小说 | 在线国产91 | 中文字幕中文字幕在线中文字幕三区 | 亚洲精品mv在线观看 | 91精品国产综合久久久久久久 | 91入口在线观看 | 国产一区二区精品在线 | 亚洲精品一区中文字幕乱码 | 欧美一级片在线免费观看 | 最新日韩在线观看 | 欧美91av| 草久草久| 狠狠的干 | 综合网天天射 | 国产精品99久久免费黑人 | 在线精品视频免费观看 | 亚洲精品999 | 69国产成人综合久久精品欧美 | 久久99免费视频 | 久久亚洲欧美日韩精品专区 | 国产麻豆电影在线观看 | 欧美无极色 | 在线国产日韩 | av先锋中文字幕 | 色丁香婷婷| 久久久久综合精品福利啪啪 | 婷婷在线色 | 麻豆影视网 | 极品国产91在线网站 | 欧美午夜a | 精品二区视频 | 91精品免费在线观看 | 成人高清在线观看 | 久久爱资源网 | 狠狠干,狠狠操 | 亚洲久草网 | 色爽网站| 免费日韩 精品中文字幕视频在线 | 亚洲影院国产 | 国产一区二区中文字幕 | 激情久久伊人 | 香蕉在线视频观看 | 国产污视频在线观看 | 日韩一区二区三免费高清在线观看 | 免费中午字幕无吗 | 伊人午夜| 欧美一级黄大片 | 狠狠干夜夜爽 | 波多野结衣精品视频 | 夜色成人网 | 狠狠的操| 麻豆 free xxxx movies hd| av免费福利| 亚洲精品国产精品国自产 | 天天躁天天狠天天透 | 黄色片免费在线 | 99国产情侣在线播放 | 亚洲男男gaygayxxxgv | 在线观看激情av | 夜夜狠狠| 亚洲精品国产综合久久 | 91精品免费在线观看 | www五月天婷婷 | 中文视频在线 | 麻豆综合网 | 国产精品九九九 | 久久亚洲人 | 亚洲国产视频a | 国产91粉嫩白浆在线观看 | 欧美日韩激情视频8区 | 手机在线免费av | 国产在线最新 | 欧美人体xx | 久久九九视频 | 国产伦精品一区二区三区在线 | 91毛片在线观看 | 久热免费在线 | 伊人日日干| 青草视频在线 | 99re中文字幕 | 国产字幕在线观看 | 久久99操| av在线网站观看 | 亚洲免费一级电影 | 欧美一级片免费 | 久久精品国产亚洲a | 在线中文字幕电影 | 91精品免费在线视频 | 日日草视频 | 精品国产乱码一区二 | 久久国产成人午夜av影院宅 | 最新av在线播放 | 久久精品亚洲精品国产欧美 | 高清不卡一区二区三区 | 日本不卡123区 | 97超级碰碰碰视频在线观看 | 国产一区二区在线播放视频 | bbb搡bbb爽爽爽 | 韩国一区二区av | 午夜影院一级 | 欧美中文字幕第一页 | 69国产成人综合久久精品欧美 | 在线视频区 | 99精品一区二区 | 婷婷九月激情 | 亚洲成a人片在线www | 色吊丝在线永久观看最新版本 | 精品自拍av| 波多野结衣久久资源 | 四虎成人免费影院 | 麻豆视频在线免费观看 | 99c视频在线| 在线观看91精品国产网站 | 毛片的网址 | 久av在线 | zzijzzij亚洲成熟少妇 | 麻花豆传媒一二三产区 | 91成人国产 | 在线观看 国产 | 国产精品18久久久久久首页狼 | 999久久国产 | 青青河边草免费 | 伊人伊成久久人综合网小说 | 91你懂的 | 婷婷丁香综合 | 五月天久久婷 | 91在线视频观看免费 | 美女黄濒 | 啪啪午夜免费 | 国产夫妻性生活自拍 | 黄色软件视频大全免费下载 | 欧美日韩亚洲第一 | a√天堂中文在线 | 久久伦理电影 | 中文字幕在线日亚洲9 | 五月天中文在线 | 久久这里只精品 | 九精品 | 1000部18岁以下禁看视频 | 奇米网网址 | 伊人婷婷色 | 最近中文字幕国语免费av | 国产小视频免费在线网址 | 51精品国自产在线 | 国产伦精品一区二区三区免费 | 色综合a | 久久好看 | 丁香婷婷激情网 | 精品久久久久久久久久国产 | 97视频在线免费观看 | 色视频在线免费 | 国产福利一区二区三区视频 | 色先锋资源网 | 日韩一区二区三区不卡 | 国产精品1024 | 日韩欧美在线视频一区二区三区 | 国产视频一区二区在线 | 在线观看视频国产一区 | 亚洲女同ⅹxx女同tv | 日韩av网页 | 四虎永久免费在线观看 | 中文字幕影片免费在线观看 | 在线观看国产日韩 | 天天综合亚洲 | 亚洲精品国产精品乱码不99热 | 免费黄色在线网站 | 99精品视频在线免费观看 | 久久你懂的 | 日日躁天天躁 | 在线蜜桃视频 | 欧美日韩精品电影 | 欧美精品国产综合久久 | 三级av中文字幕 | 成年人免费在线观看 | 亚洲另类xxxx | 亚洲精品欧美成人 | 黄色a三级 | 久久精品一区二区三 | 国产欧美精品一区aⅴ影院 99视频国产精品免费观看 | 四虎精品成人免费网站 | 天天操天天干天天插 | 天天草综合| 国产剧情在线一区 | 一区三区在线欧 | 国产亚洲资源 | 国产va精品免费观看 | 又黄又爽又无遮挡免费的网站 | 久久成人人人人精品欧 | 久久艹国产视频 | 欧美日韩精品久久久 | 99热精品久久 | 国产精品美女久久久久久久久久久 | 国产在线看一区 | 久久这里只有精品9 | 色婷婷综合视频在线观看 | 激情丁香 | 欧美视频在线观看免费网址 | 天天插天天干天天操 | 精品一区二区三区久久久 | 97国产大学生情侣白嫩酒店 | 中文字幕高清免费日韩视频在线 | 狠狠干狠狠操 | av中文字幕电影 | 婷婷精品国产一区二区三区日韩 | 亚洲日本国产 | 日韩精品欧美专区 | 久久免费电影网 | 一本一本久久a久久精品综合妖精 | 人人爽人人av | 色天堂在线视频 | 99久久99久久免费精品蜜臀 | 99久久er热在这里只有精品15 | 911av视频 | 久久久久久片 | 中文在线免费视频 | 二区三区在线视频 | 国产精品1区2区3区在线观看 | 91在线视频免费观看 | 日韩av免费大片 | 国产1级毛片 | 国产日韩欧美在线影视 | 99久久精品免费 | 久久视频免费看 | 日日日干| 黄色日批网站 | 精品国产精品久久 | 91最新视频在线观看 | 亚洲一区二区视频在线播放 | 国产日韩欧美在线 | av色一区 | 91成人网在线观看 | 日韩在线免费小视频 | 亚洲黄电影 | 超碰公开在线 | 免费aa大片| 久久久免费播放 | 精品久久91| 又黄又网站 | 天天躁日日躁狠狠躁av中文 | 国产在线视频导航 | www.夜色.com | 欧美贵妇性狂欢 | 欧美aa一级片 | 国内精品久久久久久久久 | 久久亚洲欧美日韩精品专区 | av黄网站| 久久激五月天综合精品 | 胖bbbb搡bbbb擦bbbb | 黄色片视频在线观看 | 免费日韩一区二区三区 | 超碰久热 | 精品国产伦一区二区三区免费 | 国产在线观看污片 | 中文字幕国产视频 | 99热精品在线观看 | 亚洲精品黄网站 | 欧美日韩在线播放 | 亚洲精品高清在线 | 波多野结衣理论片 | 六月婷色 | 成人午夜电影在线观看 | 亚洲自拍偷拍色图 | 欧美一级性生活视频 | 久久久精品国产免费观看同学 | 欧美日韩aaaa | 亚洲人成人天堂h久久 | 在线观看一区二区精品 | 精品国产中文字幕 | 成人久久亚洲 | 狠狠gao | 国产99久久久精品 | 婷婷深爱网 | 国产 在线 高清 精品 | 中文字幕国产精品一区二区 | av中文字幕亚洲 | 天天爱综合 | 综合亚洲视频 | 麻豆视频在线观看免费 | 成人免费视频视频在线观看 免费 | 亚洲一级电影 | 99久久精品国产欧美主题曲 | 亚洲一区二区三区四区精品 | av亚洲产国偷v产偷v自拍小说 | 菠萝菠萝在线精品视频 | 四虎成人精品永久免费av | 欧美亚洲精品一区 | 91大神精品视频在线观看 | 狠狠色香婷婷久久亚洲精品 | 99精品视频免费在线观看 | 国产精品 国内视频 | 日本aaaa级毛片在线看 | 99久久婷婷国产 | av线上免费看 | 天天干天天拍天天操天天拍 | 国产在线精品区 | 久久久久视 | 日本在线观看一区二区 | 成人av久久 | 久草精品网 | 一级理论片在线观看 | 黄色成人av网址 | 日韩三级中文字幕 | 亚洲人成免费网站 | 国产黄色精品在线 | 极品中文字幕 | 99久久精品免费看国产四区 | 成人毛片一区 | 日韩欧美精品免费 | 91精品国自产拍天天拍 | 中文字幕在线影院 | 欧美日韩在线视频一区 | 亚洲四虎 | 国产r级在线观看 | 99视频在线精品国自产拍免费观看 | 久久人人爽视频 | 超碰97人人干 | 五月婷婷欧美视频 | 国产99久久99热这里精品5 | 久久五月天色综合 | 久色伊人| 久久午夜电影网 | 精品视频国产 | 四虎永久免费网站 | 久久久久视 | 婷婷色综合色 | 久久精品综合视频 | 国产精品成人久久 | 久久五月激情 | 在线观看黄av | 成人av在线影视 | 黄色aaa毛片 | 天堂av在线 | 亚洲国产三级在线 | 国产资源在线视频 | 亚洲免费av片 | 日韩av不卡在线观看 | 国产欧美精品一区二区三区 | 国产视频综合在线 | 91在线小视频 | 欧美一区二区视频97 | 精品久久久久免费极品大片 | 日本精品久久久久影院 | 高清中文字幕 | 五月婷婷,六月丁香 | 中文字幕欧美三区 | 91av资源网| 成人av影视观看 | 久久精品视频免费 | 国产中的精品av小宝探花 | 久久精品国产免费看久久精品 | 亚a在线| 麻花豆传媒mv在线观看网站 | 国产 日韩 欧美 中文 在线播放 | 欧美一级裸体视频 | 日本三级久久久 | www国产亚洲精品久久麻豆 | 国产精品18久久久久vr手机版特色 | 欧美日韩一区二区久久 | 日韩最新中文字幕 | 成人黄色电影视频 | 国产在线一线 | 欧美韩日在线 | 久久久免费 |