在线观看www成人影院-在线观看www日本免费网站-在线观看www视频-在线观看操-欧美18在线-欧美1级

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

如何去看我們的SQL是否走索引

數據分析與開發 ? 來源:數據分析與開發 ? 作者:博客園 - 少年阿斌 ? 2021-02-01 13:52 ? 次閱讀

問題發現

我認為一條很簡單的 SQL 然后跑了很久,明明我已經都建立相應的索引,邏輯也不需要優化。

SELECTa.custid,b.score,b.xcreditscore,b.lrscore
FROM(
SELECTDISTINCTcustid
FROMsync.`credit_apply`
WHERESUBSTR(createtime,1,10)>='2019-12-15'
ANDrejectrule='xxxx'
)a
LEFTJOIN(
SELECT*
FROMsync.`credit_creditchannel`
)b
ONa.custid=b.custid;

查看索引狀態:credit_apply表

mysql>showindexfromsync.`credit_apply`;

+--------------+------------+----------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+---------------+
|Table|Non_unique|Key_name|Seq_in_index|Column_name|Collation|Cardinality|Sub_part|Packed|Null|Index_type|Comment|Index_comment|
+--------------+------------+----------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+---------------+
|credit_apply|0|PRIMARY|1|applyId|A|1468496|NULL|NULL||BTREE|||
|credit_apply|1|index2|1|custId|A|666338|NULL|NULL||BTREE|||
|credit_apply|1|index2|2|createTime|A|1518231|NULL|NULL||BTREE|||
+--------------+------------+----------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+---------------+

或者

CREATETABLE`credit_apply`(
`applyId`bigint(20)NOTNULLAUTO_INCREMENT,
`custId`varchar(128)COLLATEutf8mb4_unicode_ciNOTNULL,
`ruleVersion`int(11)NOTNULLDEFAULT'1',
`rejectRule`varchar(128)COLLATEutf8mb4_unicode_ciDEFAULT'DP0000',
`status`tinyint(4)NOTNULLDEFAULT'0',
`extra`textCOLLATEutf8mb4_unicode_ci,
`createTime`timestampNOTNULLDEFAULTCURRENT_TIMESTAMP,
`updateTime`timestampNOTNULLDEFAULTCURRENT_TIMESTAMPONUPDATECURRENT_TIMESTAMP,
`mobile`varchar(128)COLLATEutf8mb4_unicode_ciDEFAULT'',
PRIMARYKEY(`applyId`)USINGBTREE,
KEY`index2`(`custId`,`createTime`)
)ENGINE=InnoDBAUTO_INCREMENT=1567035DEFAULTCHARSET=utf8mb4COLLATE=utf8mb4_unicode_ci

sync.`credit_creditchannel`表

mysql>showindexfromsync.`credit_creditchannel`;
+----------------------+------------+-----------------------------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+---------------+
|Table|Non_unique|Key_name|Seq_in_index|Column_name|Collation|Cardinality|Sub_part|Packed|Null|Index_type|Comment|Index_comment|
+----------------------+------------+-----------------------------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+---------------+
|credit_creditchannel|0|PRIMARY|1|recId|A|450671|NULL|NULL||BTREE|||
|credit_creditchannel|1|nationalId_custid|1|nationalId|A|450770|NULL|NULL||BTREE|||
|credit_creditchannel|1|nationalId_custid|2|custId|A|450770|NULL|NULL|YES|BTREE|||
|credit_creditchannel|1|credit_creditchannel_custId|1|custId|A|450770|10|NULL|YES|BTREE|||
+----------------------+------------+-----------------------------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+---------------+

或者

CREATETABLE`credit_creditchannel`(
`recId`bigint(20)NOTNULLAUTO_INCREMENT,
`nationalId`varchar(128)NOTNULLDEFAULT'',
`identityType`varchar(3)NOTNULLDEFAULT'',
`brief`mediumtext,
`score`decimal(10,4)NOTNULLDEFAULT'0.0000',
`npaCode`varchar(128)NOTNULLDEFAULT'',
`basic`mediumtext,
`createTime`timestampNOTNULLDEFAULTCURRENT_TIMESTAMP,
`updateTime`timestampNOTNULLDEFAULTCURRENT_TIMESTAMPONUPDATECURRENT_TIMESTAMP,
`request`mediumtext,
`custId`varchar(128)DEFAULT'',
`xcreditScore`decimal(10,4)DEFAULT'0.0000',
`queryTime`varchar(24)DEFAULT'',
`lrScore`decimal(10,4)DEFAULT'0.0000',
PRIMARYKEY(`recId`)USINGBTREE,
KEY`nationalId_custid`(`nationalId`,`custId`),
KEY`credit_creditchannel_custId`(`custId`(10))
)ENGINE=InnoDBAUTO_INCREMENT=586557DEFAULTCHARSET=utf8

我們都可以看到相應的索引。以現在簡單的sql邏輯理論上走custid這個索引就好了

解釋函數explain

mysql>explainSELECTa.custid,b.score,b.xcreditscore,b.lrscoreFROM(
SELECTDISTINCTcustidFROMsync.`credit_apply`WHERESUBSTR(createtime,1,10)>='2019-12-15'ANDrejectrule='xxx')a
LEFTJOIN
(select*fromsync.`credit_creditchannel`)b
ONa.custid=b.custid;
+----+-------------+----------------------+------------+-------+---------------+--------+---------+------+---------+----------+----------------------------------------------------+
|id|select_type|table|partitions|type|possible_keys|key|key_len|ref|rows|filtered|Extra|
+----+-------------+----------------------+------------+-------+---------------+--------+---------+------+---------+----------+----------------------------------------------------+
|1|PRIMARY||NULL|ALL|NULL|NULL|NULL|NULL|158107|100.00|NULL|
|1|PRIMARY|credit_creditchannel|NULL|ALL|NULL|NULL|NULL|NULL|450770|100.00|Usingwhere;Usingjoinbuffer(BlockNestedLoop)|
|2|DERIVED|credit_apply|NULL|index|index2|index2|518|NULL|1581075|10.00|Usingwhere|
+----+-------------+----------------------+------------+-------+---------------+--------+---------+------+---------+----------+----------------------------------------------------+
3rowsinset(0.06sec)

如何去看我們的SQL是否走索引?我們只需要注意一個最重要的type 的信息很明顯的提現是否用到索引:

type結果type結果值從好到壞依次是:system > const > eq_ref > ref > fulltext > ref_or_null > index_merge > unique_subquery > index_subquery > range > index > ALL一般來說,得保證查詢至少達到range級別,最好能達到ref,否則就可能會出現性能問題。possible_keys:sql所用到的索引key:顯示MySQL實際決定使用的鍵(索引)。如果沒有選擇索引,鍵是NULLrows: 顯示MySQL認為它執行查詢時必須檢查的行數。

分析:我們的credit_creditchannel是ALL,而possible_keys是NULL索引在查詢該表的時候并沒有用到索引怪不得這么慢!!!!!!!!!

分析和搜索解決辦法

換著法的改sql也沒用;換著群問大神也沒用;各種搜索引擎搜才總算有點思路。**索引用不上的原因可能是字符集和排序規則不相同。于是看了了兩張表的字符集和兩張表這個字段的字符集以及排序規則:

d4dfa272-62c3-11eb-8b86-12bb97331649.png

**修改數據庫和表的字符集

alterdatabasesyncdefaultcharactersetutf8mb4;//修改數據庫的字符集
altertablesync.credit_creditchanneldefaultcharactersetutf8mb4;//修改表的字符集

****修改表排序規則

altertablesync.`credit_creditchannel`converttocharactersetutf8mb4COLLATEutf8mb4_unicode_ci;

由于數據庫中的數據表和表字段的字符集和排序規則不統一,批量修改腳本如下:1. 修改指定數據庫中所有varchar類型的表字段的字符集為ut8mb4,并將排序規則修改為utf8_unicode_ci

SELECTCONCAT('ALTERTABLE`',table_name,'`MODIFY`',column_name,'`',DATA_TYPE,'(',CHARACTER_MAXIMUM_LENGTH,')CHARACTERSETutf8mb4COLLATEutf8mb4_unicode_ci',CASE
WHENIS_NULLABLE='NO'THEN'NOTNULL'
ELSE''
END,';')
FROMinformation_schema.COLUMNS
WHERE(TABLE_SCHEMA='databaseName'
ANDDATA_TYPE='varchar'
AND(CHARACTER_SET_NAME!='utf8mb4'
ORCOLLATION_NAME!='utf8mb4_unicode_ci'));

**2.修改指定數據庫中所有數據表的字符集為UTF8,并將排序規則修改為utf8_general_ci**

SELECTCONCAT('ALTERTABLE',table_name,'CONVERTTOCHARACTERSETutf8mb4COLLATEutf8mb4_unicode_ci;')
FROMinformation_schema.TABLES
WHERETABLE_SCHEMA='sync_rs'

explain 查看是否用到了索引

mysql>explainSELECTa.custid,b.score,b.xcreditscore,b.lrscoreFROM(
SELECTDISTINCTcustidFROMsync.`credit_apply`WHERESUBSTR(createtime,1,10)>='2019-12-15'ANDrejectrule='xxx')a
LEFTJOIN
(select*fromsync.`credit_creditchannel`)b
ONa.custid=b.custid;
+----+-------------+----------------------+------------+-------+-----------------------------+-----------------------------+---------+----------+---------+----------+-------------+
|id|select_type|table|partitions|type|possible_keys|key|key_len|ref|rows|filtered|Extra|
+----+-------------+----------------------+------------+-------+-----------------------------+-----------------------------+---------+----------+---------+----------+-------------+
|1|PRIMARY||NULL|ALL|NULL|NULL|NULL|NULL|146864|100.00|NULL|
|1|PRIMARY|credit_creditchannel|NULL|ref|credit_creditchannel_custId|credit_creditchannel_custId|43|a.custid|1|100.00|Usingwhere|
|2|DERIVED|credit_apply|NULL|index|index2|index2|518|NULL|1468644|10.00|Usingwhere|
+----+-------------+----------------------+------------+-------+-----------------------------+-----------------------------+---------+----------+---------+----------+-------------+

就是這樣!!!!

補充大全:

可以看到結果中包含10列信息,分別為

id、select_type、table、type、possible_keys、key、key_len、ref、rows、Extra

對應的簡單描述如下:

  • id: select查詢的序列號,包含一組數字,表示查詢中執行select子句或操作表的順序===id如果相同,可以認為是一組,從上往下順序執行;在所有組中,id值越大,優先級越高,越先執行

  • select_type: 表示查詢的類型。用于區別普通查詢、聯合查詢、子查詢等的復雜查詢。

  • table: 輸出結果集的表 顯示這一步所訪問數據庫中表名稱(顯示這一行的數據是關于哪張表的),有時不是真實的表名字,可能是簡稱,例如上面的e,d,也可能是第幾步執行的結果的簡稱

  • partitions:匹配的分區

  • type:對表訪問方式,表示MySQL在表中找到所需行的方式,又稱“訪問類型”。

  • possible_keys:表示查詢時,可能使用的索引

  • key:表示實際使用的索引

  • key_len:索引字段的長度

  • ref:列與索引的比較

  • rows:掃描出的行數(估算的行數)

  • filtered:按表條件過濾的行百分比

  • Extra:執行情況的描述和說明

挑選一些重要信息詳細說明:

  • select_type

    • SIMPLE 簡單的select查詢,查詢中不包含子查詢或者UNION

    • PRIMARY 查詢中若包含任何復雜的子部分,最外層查詢則被標記為PRIMARY

    • SUBQUERY 在SELECT或WHERE列表中包含了子查詢

    • DERIVED 在FROM列表中包含的子查詢被標記為DERIVED(衍生),MySQL會遞歸執行這些子查詢,把結果放在臨時表中

    • UNION 若第二個SELECT出現在UNION之后,則被標記為UNION:若UNION包含在FROM子句的子查詢中,外層SELECT將被標記為:DERIVED

    • UNION RESULT 從UNION表獲取結果的SELECT

  • type

    • mysql找到數據行的方式,效率排名

    • NULL > system > const > eq_ref > ref > range > index > all

***一般來說,得保證查詢至少達到range級別,最好能達到ref。

  1. system 表只有一行記錄(等于系統表),這是const類型的特列,平時不會出現,這個也可以忽略不計

  2. const 通過索引一次就找到了,const用于比較primary key 和 unique key,因為只匹配一行數據,所以很快。如果將主鍵置于where列表中,mysql就能將該查詢轉換為一個常量

  3. eq_ref 唯一性索引掃描,對于每個索引鍵,表中只有一條記錄與之匹配。常見于主鍵索引和唯一索引 區別于const eq_ref用于聯表查詢的情況

  4. ref 非唯一索引掃描,返回匹配某個單獨值的所有行,本質上也是一種索引訪問,它返回所有匹配某個單獨值的行,然而,他可能會找到多個符合條件的行,所以他應該屬于查找和掃描的混合體

  5. range 只檢索給定范圍的行,使用一個索引來選擇行,一般是在where中出現between、<、>、in等查詢,范圍掃描好于全表掃描,因為他只需要開始于索引的某一點,而結束于另一點,不用掃描全部索引

  6. index Full Index Scan,Index與All區別為index類型只遍歷索引樹。通常比All快,因為索引文件通常比數據文件小。也就是說,雖然all和index都是讀全表,但是index是從索引中讀取的,而all是從硬盤讀取的

  7. ALL Full Table Scan,將遍歷全表以找到匹配的行

  • possible_keys

指出mysql能使用哪個索引在表中找到記錄,查詢涉及到的字段若存在索引,則該索引被列出,但不一定被查詢使用(該查詢可以利用的索引,如果沒有任何索引顯示null)
實際使用的索引,如果為NULL,則沒有使用索引。(可能原因包括沒有建立索引或索引失效)
查詢中若使用了覆蓋索引(select 后要查詢的字段剛好和創建的索引字段完全相同),則該索引僅出現在key列表中 possible_keys為null

  • key

key列顯示mysql實際決定使用的索引,必然包含在possible_keys中。如果沒有選擇索引,鍵是NULL。想要強制使用或者忽視possible_keys列中的索引,在查詢時指定FORCE INDEX、USE INDEX或者IGNORE index

  • key_len

表示索引中使用的字節數,可通過該列計算查詢中使用的索引的長度,在不損失精確性的情況下,長度越短越好。key_len顯示的值為索引字段的最大可能長度,并非實際使用長度,即key_len是根據表定義計算而得,不是通過表內檢索出的。

  • ref

顯示索引的那一列被使用了,如果可能的話,最好是一個常數。哪些列或常量被用于查找索引列上的值。

  • rows

根據表統計信息及索引選用情況,大致估算出找到所需的記錄所需要讀取的行數,也就是說,用的越少越好

  • extra

包含不適合在其他列中顯式但十分重要的額外信息

  • Using Index:表示相應的select操作中使用了覆蓋索引(Covering Index),避免訪問了表的數據行,效率不錯。如果同時出現using where,表明索引被用來執行索引鍵值的查找;如果沒有同時出現using where,表明索引用來讀取數據而非執行查找動作。

  • Using where:不用讀取表中所有信息,僅通過索引就可以獲取所需數據,這發生在對表的全部的請求列都是同一個索引的部分的時候,表示mysql服務器將在存儲引擎檢索行后再進行過濾

  • Using temporary:表示MySQL需要使用臨時表來存儲結果集,常見于排序和分組查詢,常見 group by ; order by

  • Using filesort:當Query中包含 order by 操作,而且無法利用索引完成的排序操作稱為“文件排序”

  • Using join buffer:表明使用了連接緩存,比如說在查詢的時候,多表join的次數非常多,那么將配置文件中的緩沖區的join buffer調大一些。

  • Impossible where:where子句的值總是false,不能用來獲取任何元組

  • Select tables optimized away:這個值意味著僅通過使用索引,優化器可能僅從聚合函數結果中返回一行

  • No tables used:Query語句中使用from dual 或不含任何from子句

以上兩種信息表示mysql無法使用索引

  1. using filesort :表示mysql會對結果使用一個外部索引排序,而不是從表里按索引次序讀到相關內容,可能在內存或磁盤上排序。mysql中無法利用索引完成的操作稱為文件排序

  2. using temporary: 使用了用臨時表保存中間結果,MySQL在對查詢結果排序時使用臨時表。常見于排序order by和分組查詢group by。

責任編輯:xj

原文標題:如何查看 sql 查詢是否用到索引 ( mysql )

文章出處:【微信公眾號:數據分析與開發】歡迎添加關注!文章轉載請注明出處。


聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • SQL
    SQL
    +關注

    關注

    1

    文章

    781

    瀏覽量

    44841
  • MySQL
    +關注

    關注

    1

    文章

    849

    瀏覽量

    27607
  • 索引
    +關注

    關注

    0

    文章

    59

    瀏覽量

    10633

原文標題:如何查看 sql 查詢是否用到索引 ( mysql )

文章出處:【微信號:DBDevs,微信公眾號:數據分析與開發】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏

    評論

    相關推薦
    熱點推薦

    大促數據庫壓力激增,如何一眼定位 SQL 執行來源?

    是否曾經遇到過這樣的情況:在大促活動期間,用戶訪問量驟增,數據庫的壓力陡然加大,導致響應變慢甚至服務中斷?更讓人頭疼的是,當你試圖快速定位問題所在時,卻發現難以確定究竟是哪個業務邏輯中的 SQL
    的頭像 發表于 06-10 11:32 ?83次閱讀
    大促數據庫壓力激增,如何一眼定位 <b class='flag-5'>SQL</b> 執行來源?

    如何一眼定位SQL的代碼來源:一款SQL染色標記的簡易MyBatis插件

    作者:京東物流 郭忠強 導語 本文分析了后端研發和運維在日常工作中所面臨的線上SQL定位排查痛點,基于姓名貼的靈感,設計和開發了一款SQL染色標記的MyBatis插件。該插件輕量高效,對業務代碼無
    的頭像 發表于 03-05 11:36 ?359次閱讀
    如何一眼定位<b class='flag-5'>SQL</b>的代碼來源:一款<b class='flag-5'>SQL</b>染色標記的簡易MyBatis插件

    Devart: dbForge Compare Bundle for SQL Server—比較SQL數據庫最簡單、最準確的方法

    ? dbForge Compare Bundle For SQL Server:包含兩個工具,可幫助您節省用于手動數據庫比較的 70% 的時間 dbForge數據比較 幫助檢測和分析實時SQL數據庫
    的頭像 發表于 01-17 11:35 ?472次閱讀

    dbForge Studio For SQL Server:用于有效開發的最佳SQL Server集成開發環境

    dbForge Studio For SQL Server:用于有效開發的最佳SQL Server集成開發環境 SQL編碼助手 SQL代碼分析 查詢分析器 可視化查詢生成器 數據和模式
    的頭像 發表于 01-16 10:36 ?641次閱讀

    創建唯一索引SQL命令和技巧

    在創建唯一索引時,以下是一些SQL命令和技巧,可以幫助優化性能: 使用合適的索引類型:對于需要保證唯一性的列,使用UNIQUE索引來避免重復數據的插入。 這可以確保列中的值是唯一的,同
    的頭像 發表于 01-09 15:21 ?396次閱讀

    通過Skyvia Connect SQL終端節點訪問任何數據

    通過 Skyvia Connect SQL 終端節點訪問任何數據 ? 通過 Skyvia Connect SQL 終端節點訪問任何數據ADO.NET 數據網關 使用 Skyvia Connect
    的頭像 發表于 01-02 09:31 ?320次閱讀
    通過Skyvia Connect <b class='flag-5'>SQL</b>終端節點訪問任何數據

    淺談SQL優化小技巧

    存儲在緩存中的數據; (3)未命中緩存后,MySQL通過關鍵字將SQL語句進行解析,并生成一顆對應的解析樹,MySQL解析器將使用MySQL語法進行驗證和解析。 例如,驗證是否使用了錯誤的關鍵字,或者關鍵字的使用是否正確; (4
    的頭像 發表于 12-25 09:59 ?799次閱讀

    SQL錯誤代碼及解決方案

    SQL數據庫開發和管理中,常見的錯誤代碼及其解決方案可以歸納如下: 一、語法錯誤(Syntax Errors) 錯誤代碼 :無特定代碼,但通常會在錯誤消息中明確指出是語法錯誤。 原因 :SQL語句
    的頭像 發表于 11-19 10:21 ?6187次閱讀

    常用SQL函數及其用法

    SQL(Structured Query Language)是一種用于管理和操作關系數據庫的編程語言。SQL 提供了豐富的函數庫,用于數據檢索、數據更新、數據刪除以及數據聚合等操作。以下是一些常用
    的頭像 發表于 11-19 10:18 ?1268次閱讀

    SQL與NoSQL的區別

    在信息技術領域,數據庫是存儲和管理數據的核心組件。隨著互聯網的發展和大數據時代的到來,對數據庫的需求也在不斷變化。SQL和NoSQL作為兩種主流的數據庫管理系統,各自有著獨特的優勢和應用場
    的頭像 發表于 11-19 10:15 ?528次閱讀

    大數據從業者必知必會的Hive SQL調優技巧

    大數據從業者必知必會的Hive SQL調優技巧 摘要 :在大數據領域中,Hive SQL被廣泛應用于數據倉庫的數據查詢和分析。然而,由于數據量龐大和復雜的查詢需求,Hive SQL查詢的性能往往
    的頭像 發表于 09-24 13:30 ?627次閱讀

    MATLAB中的矩陣索引

    對矩陣進行索引是從矩陣中選擇或修改部分元素的一種方式。MATLAB 有幾種索引樣式,它們不僅功能強大、靈活,而且可讀性強、表現力強。矩陣是 MATLAB 用來組織和分析數據的一個核心組件,索引是以可理解的方式有效操作矩陣的關鍵。
    的頭像 發表于 09-05 09:28 ?992次閱讀
    MATLAB中的矩陣<b class='flag-5'>索引</b>

    IP 地址在 SQL 注入攻擊中的作用及防范策略

    數據庫在各個領域的逐步應用,其安全性也備受關注。SQL 注入攻擊作為一種常見的數據庫攻擊手段,給網絡安全帶來了巨大威脅。今天我們來聊一聊SQL 注入攻擊的基本知識。 SQL 注入攻擊的
    的頭像 發表于 08-05 17:36 ?586次閱讀

    一文了解MySQL索引機制

    接觸MySQL數據庫的小伙伴一定避不開索引索引的出現是為了提高數據查詢的效率,就像書的目錄一樣。 某一個SQL查詢比較慢,你第一時間想到的就是“給某個字段加個索引吧”,那么
    的頭像 發表于 07-25 14:05 ?527次閱讀
    一文了解MySQL<b class='flag-5'>索引</b>機制

    什么是 Flink SQL 解決不了的問題?

    簡介 在實時數據開發過程中,大家經常會用 Flink SQL 或者 Flink DataStream API 來做數據加工。通常情況下選用2者都能加工出想要的數據,但是總會有 Flink SQL
    的頭像 發表于 07-09 20:50 ?542次閱讀
    主站蜘蛛池模板: 色噜噜狠狠狠色综合久 | 日本在线视频不卡 | 午夜免费啪啪 | 特黄三级 | 青娱乐伊人 | 一级毛片ab片高清毛片 | 狼色网站 | 97久久草草超级碰碰碰 | 91在线免费观看网站 | 手机看片福利盒子久久 | 亚洲天天看| 日本aaaaa毛片动漫 | 久久网色| 黄色免费网站视频 | 天天影视亚洲 | 最新午夜| 男女草逼视频 | 色综合天天色 | 国产日韩欧美综合色视频在线 | 亚洲成人在线播放 | 欧美一区二区三区免费看 | 色综合天天综合网国产国产人 | 午夜国产精品久久影院 | 国产精品a在线观看香蕉 | 一级特黄aa大片免费播放视频 | 色播在线永久免费视频网站 | 黄色毛片子| 国产精品久久久久久久免费大片 | 午夜美女视频在线观看高清 | www.五月天 | 任你操免费视频 | 欧美色天使 | 久综合色| 四虎影院永久网站 | 国产妇女在线 | 久久综合五月婷婷 | 国产精品99r8在线观看 | 国产黄色一级网站 | 欧美一级特黄aaaaaaa在线观看 | 亚洲精品一区二区中文 | 日本黄色美女网站 |