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

很用心的為你寫了9道MySQL面試題

數(shù)據(jù)庫(kù) MySQL
后面會(huì)多輸出 MySQL 的文章貢獻(xiàn)給大家,畢竟 MySQL 涉及到數(shù)據(jù)存儲(chǔ)、鎖、磁盤尋道、分頁(yè)等操作系統(tǒng)概念,而且互聯(lián)網(wǎng)對(duì) MySQL 的注重程度是不言而喻的,后面要加緊對(duì) MySQL 的研究。

 MySQL 一直是本人很薄弱的部分,后面會(huì)多輸出 MySQL 的文章貢獻(xiàn)給大家,畢竟 MySQL 涉及到數(shù)據(jù)存儲(chǔ)、鎖、磁盤尋道、分頁(yè)等操作系統(tǒng)概念,而且互聯(lián)網(wǎng)對(duì) MySQL 的注重程度是不言而喻的,后面要加緊對(duì) MySQL 的研究。寫的如果不好,還請(qǐng)大家見(jiàn)諒。

非關(guān)系型數(shù)據(jù)庫(kù)和關(guān)系型數(shù)據(jù)庫(kù)區(qū)別,優(yōu)勢(shì)比較

非關(guān)系型數(shù)據(jù)庫(kù)(感覺(jué)翻譯不是很準(zhǔn)確)稱為 NoSQL,也就是 Not Only SQL,不僅僅是 SQL。非關(guān)系型數(shù)據(jù)庫(kù)不需要寫一些復(fù)雜的 SQL 語(yǔ)句,其內(nèi)部存儲(chǔ)方式是以 key-value 的形式存在可以把它想象成電話本的形式,每個(gè)人名(key)對(duì)應(yīng)電話(value)。常見(jiàn)的非關(guān)系型數(shù)據(jù)庫(kù)主要有 Hbase、Redis、MongoDB 等。非關(guān)系型數(shù)據(jù)庫(kù)不需要經(jīng)過(guò) SQL 的重重解析,所以性能很高;非關(guān)系型數(shù)據(jù)庫(kù)的可擴(kuò)展性比較強(qiáng),數(shù)據(jù)之間沒(méi)有耦合性,遇見(jiàn)需要新加字段的需求,就直接增加一個(gè) key-value 鍵值對(duì)即可。

關(guān)系型數(shù)據(jù)庫(kù)以表格的形式存在,以行和列的形式存取數(shù)據(jù),關(guān)系型數(shù)據(jù)庫(kù)這一系列的行和列被稱為表,無(wú)數(shù)張表組成了數(shù)據(jù)庫(kù),常見(jiàn)的關(guān)系型數(shù)據(jù)庫(kù)有 Oracle、DB2、Microsoft SQL Server、MySQL等。關(guān)系型數(shù)據(jù)庫(kù)能夠支持復(fù)雜的 SQL 查詢,能夠體現(xiàn)出數(shù)據(jù)之間、表之間的關(guān)聯(lián)關(guān)系;關(guān)系型數(shù)據(jù)庫(kù)也支持事務(wù),便于提交或者回滾。

它們之間的劣勢(shì)都是基于對(duì)方的優(yōu)勢(shì)來(lái)滿足的。

MySQL 事務(wù)四大特性

一說(shuō)到 MySQL 事務(wù),你肯定能想起來(lái)四大特性:原子性、一致性、隔離性、持久性,下面再對(duì)這事務(wù)的四大特性做一個(gè)描述

  •  原子性(Atomicity): 原子性指的就是 MySQL 中的包含事務(wù)的操作要么全部成功、要么全部失敗回滾,因此事務(wù)的操作如果成功就必須要全部應(yīng)用到數(shù)據(jù)庫(kù),如果操作失敗則不能對(duì)數(shù)據(jù)庫(kù)有任何影響。

    “    這里涉及到一個(gè)概念,什么是 MySQL 中的事務(wù)?    事務(wù)是一組操作,組成這組操作的各個(gè)單元,要不全都成功要不全都失敗,這個(gè)特性就是事務(wù)。    在 MySQL 中,事務(wù)是在引擎層實(shí)現(xiàn)的,只有使用 innodb 引擎的數(shù)據(jù)庫(kù)或表才支持事務(wù)。

  •  一致性(Consistency):一致性指的是一個(gè)事務(wù)在執(zhí)行前后其狀態(tài)一致。比如 A 和 B 加起來(lái)的錢一共是 1000 元,那么不管 A 和 B 之間如何轉(zhuǎn)賬,轉(zhuǎn)多少次,事務(wù)結(jié)束后兩個(gè)用戶的錢加起來(lái)還得是 1000,這就是事務(wù)的一致性。
  •  持久性(Durability): 持久性指的是一旦事務(wù)提交,那么發(fā)生的改變就是永久性的,即使數(shù)據(jù)庫(kù)遇到特殊情況比如故障的時(shí)候也不會(huì)產(chǎn)生干擾。
  •  隔離性(Isolation):隔離性需要重點(diǎn)說(shuō)一下,當(dāng)多個(gè)事務(wù)同時(shí)進(jìn)行時(shí),就有可能出現(xiàn)臟讀(dirty read)、不可重復(fù)讀(non-repeatable read)、幻讀(phantom read) 的情況,為了解決這些并發(fā)問(wèn)題,提出了隔離性的概念。

    “    臟讀:事務(wù) A 讀取了事務(wù) B 更新后的數(shù)據(jù),但是事務(wù) B 沒(méi)有提交,然后事務(wù) B 執(zhí)行回滾操作,那么事務(wù) A 讀到的數(shù)據(jù)就是臟數(shù)據(jù)    不可重復(fù)讀:事務(wù) A 進(jìn)行多次讀取操作,事務(wù) B 在事務(wù) A 多次讀取的過(guò)程中執(zhí)行更新操作并提交,提交后事務(wù) A 讀到的數(shù)據(jù)不一致。    幻讀:事務(wù) A 將數(shù)據(jù)庫(kù)中所有學(xué)生的成績(jī)由 A -> B,此時(shí)事務(wù) B 手動(dòng)插入了一條成績(jī)?yōu)?A 的記錄,在事務(wù) A 更改完畢后,發(fā)現(xiàn)還有一條記錄沒(méi)有修改,那么這種情況就叫做出現(xiàn)了幻讀。

SQL的隔離級(jí)別有四種,它們分別是讀未提交(read uncommitted)、讀已提交(read committed)、可重復(fù)讀(repetable read) 和 串行化(serializable)。下面分別來(lái)解釋一下。

讀未提交:讀未提交指的是一個(gè)事務(wù)在提交之前,它所做的修改就能夠被其他事務(wù)所看到。

讀已提交:讀已提交指的是一個(gè)事務(wù)在提交之后,它所做的變更才能夠讓其他事務(wù)看到。

可重復(fù)讀:可重復(fù)讀指的是一個(gè)事務(wù)在執(zhí)行的過(guò)程中,看到的數(shù)據(jù)是和啟動(dòng)時(shí)看到的數(shù)據(jù)是一致的。未提交的變更對(duì)其他事務(wù)不可見(jiàn)。

串行化:顧名思義是對(duì)于同一行記錄,寫會(huì)加寫鎖,讀會(huì)加讀鎖。當(dāng)出現(xiàn)讀寫鎖沖突的時(shí)候,后訪問(wèn)的事務(wù)必須等前一個(gè)事務(wù)執(zhí)行完成,才能繼續(xù)執(zhí)行。

這四個(gè)隔離級(jí)別可以解決臟讀、不可重復(fù)讀、幻象讀這三類問(wèn)題。總結(jié)如下

其中隔離級(jí)別由低到高是:讀未提交 < 讀已提交 < 可重復(fù)讀 < 串行化

隔離級(jí)別越高,越能夠保證數(shù)據(jù)的完整性和一致性,但是對(duì)并發(fā)的性能影響越大。大多數(shù)數(shù)據(jù)庫(kù)的默認(rèn)級(jí)別是讀已提交(Read committed),比如 Sql Server、Oracle ,但是 MySQL 的默認(rèn)隔離級(jí)別是 可重復(fù)讀(repeatable-read)。

MySQL 常見(jiàn)存儲(chǔ)引擎的區(qū)別

MySQL 常見(jiàn)的存儲(chǔ)引擎,可以使用 

  1. SHOW ENGINES 

命令,來(lái)列出所有的存儲(chǔ)引擎

可以看到,InnoDB 是 MySQL 默認(rèn)支持的存儲(chǔ)引擎,支持事務(wù)、行級(jí)鎖定和外鍵。

MyISAM 存儲(chǔ)引擎的特點(diǎn)

在 5.1 版本之前,MyISAM 是 MySQL 的默認(rèn)存儲(chǔ)引擎,MyISAM 并發(fā)性比較差,使用的場(chǎng)景比較少,主要特點(diǎn)是

  •  不支持事務(wù)操作,ACID 的特性也就不存在了,這一設(shè)計(jì)是為了性能和效率考慮的。
  •  不支持外鍵操作,如果強(qiáng)行增加外鍵,MySQL 不會(huì)報(bào)錯(cuò),只不過(guò)外鍵不起作用。
  •  MyISAM 默認(rèn)的鎖粒度是表級(jí)鎖,所以并發(fā)性能比較差,加鎖比較快,鎖沖突比較少,不太容易發(fā)生死鎖的情況。
  •  MyISAM 會(huì)在磁盤上存儲(chǔ)三個(gè)文件,文件名和表名相同,擴(kuò)展名分別是 .frm(存儲(chǔ)表定義)、.MYD(MYData,存儲(chǔ)數(shù)據(jù))、MYI(MyIndex,存儲(chǔ)索引)。這里需要特別注意的是 MyISAM 只緩存索引文件,并不緩存數(shù)據(jù)文件。
  •  MyISAM 支持的索引類型有 全局索引(Full-Text)、B-Tree 索引、R-Tree 索引

           Full-Text 索引:它的出現(xiàn)是為了解決針對(duì)文本的模糊查詢效率較低的問(wèn)題。

           B-Tree 索引:所有的索引節(jié)點(diǎn)都按照平衡樹的數(shù)據(jù)結(jié)構(gòu)來(lái)存儲(chǔ),所有的索引數(shù)據(jù)節(jié)點(diǎn)都在葉節(jié)點(diǎn)

           R-Tree索引:它的存儲(chǔ)方式和 B-Tree 索引有一些區(qū)別,主要設(shè)計(jì)用于存儲(chǔ)空間和多維數(shù)據(jù)的字段做索引,目前的 MySQL 版本僅支持 geometry 類型的字段作索引,相對(duì)于 BTREE,RTREE             的優(yōu)勢(shì)在于范圍查找。

  •  數(shù)據(jù)庫(kù)所在主機(jī)如果宕機(jī),MyISAM 的數(shù)據(jù)文件容易損壞,而且難以恢復(fù)。
  •  增刪改查性能方面:SELECT 性能較高,適用于查詢較多的情況

InnoDB 存儲(chǔ)引擎的特點(diǎn)

自從 MySQL 5.1 之后,默認(rèn)的存儲(chǔ)引擎變成了 InnoDB 存儲(chǔ)引擎,相對(duì)于 MyISAM,InnoDB 存儲(chǔ)引擎有了較大的改變,它的主要特點(diǎn)是

  •  支持事務(wù)操作,具有事務(wù) ACID 隔離特性,默認(rèn)的隔離級(jí)別是可重復(fù)讀(repetable-read)、通過(guò)MVCC(并發(fā)版本控制)來(lái)實(shí)現(xiàn)的。能夠解決臟讀和不可重復(fù)讀的問(wèn)題。
  •  InnoDB 支持外鍵操作。
  •  InnoDB 默認(rèn)的鎖粒度行級(jí)鎖,并發(fā)性能比較好,會(huì)發(fā)生死鎖的情況。
  •  和 MyISAM 一樣的是,InnoDB 存儲(chǔ)引擎也有 .frm文件存儲(chǔ)表結(jié)構(gòu) 定義,但是不同的是,InnoDB 的表數(shù)據(jù)與索引數(shù)據(jù)是存儲(chǔ)在一起的,都位于 B+ 數(shù)的葉子節(jié)點(diǎn)上,而 MyISAM 的表數(shù)據(jù)和索引數(shù)據(jù)是分開的。
  •  InnoDB 有安全的日志文件,這個(gè)日志文件用于恢復(fù)因數(shù)據(jù)庫(kù)崩潰或其他情況導(dǎo)致的數(shù)據(jù)丟失問(wèn)題,保證數(shù)據(jù)的一致性。
  •  InnoDB 和 MyISAM 支持的索引類型相同,但具體實(shí)現(xiàn)因?yàn)槲募Y(jié)構(gòu)的不同有很大差異。
  •  增刪改查性能方面,如果執(zhí)行大量的增刪改操作,推薦使用 InnoDB 存儲(chǔ)引擎,它在刪除操作時(shí)是對(duì)行刪除,不會(huì)重建表。

MyISAM 和 InnoDB 存儲(chǔ)引擎的對(duì)比

  •  鎖粒度方面:由于鎖粒度不同,InnoDB 比 MyISAM 支持更高的并發(fā);InnoDB 的鎖粒度為行鎖、MyISAM 的鎖粒度為表鎖、行鎖需要對(duì)每一行進(jìn)行加鎖,所以鎖的開銷更大,但是能解決臟讀和不可重復(fù)讀的問(wèn)題,相對(duì)來(lái)說(shuō)也更容易發(fā)生死鎖
  •  可恢復(fù)性上:由于 InnoDB 是有事務(wù)日志的,所以在產(chǎn)生由于數(shù)據(jù)庫(kù)崩潰等條件后,可以根據(jù)日志文件進(jìn)行恢復(fù)。而 MyISAM 則沒(méi)有事務(wù)日志。
  •  查詢性能上:MyISAM 要優(yōu)于 InnoDB,因?yàn)?InnoDB 在查詢過(guò)程中,是需要維護(hù)數(shù)據(jù)緩存,而且查詢過(guò)程是先定位到行所在的數(shù)據(jù)塊,然后在從數(shù)據(jù)塊中定位到要查找的行;而 MyISAM 可以直接定位到數(shù)據(jù)所在的內(nèi)存地址,可以直接找到數(shù)據(jù)。
  •  表結(jié)構(gòu)文件上:MyISAM 的表結(jié)構(gòu)文件包括:.frm(表結(jié)構(gòu)定義),.MYI(索引),.MYD(數(shù)據(jù));而 InnoDB 的表數(shù)據(jù)文件為:.ibd和.frm(表結(jié)構(gòu)定義);

MySQL 基礎(chǔ)架構(gòu)

這道題應(yīng)該從 MySQL 架構(gòu)來(lái)理解,我們可以把 MySQL 拆解成幾個(gè)零件,如下圖所示

大致上來(lái)說(shuō),MySQL 可以分為 Server層和 存儲(chǔ)引擎層。

Server 層包括連接器、查詢緩存、分析器、優(yōu)化器、執(zhí)行器,包括大多數(shù) MySQL 中的核心功能,所有跨存儲(chǔ)引擎的功能也在這一層實(shí)現(xiàn),包括 存儲(chǔ)過(guò)程、觸發(fā)器、視圖等。

存儲(chǔ)引擎層包括 MySQL 常見(jiàn)的存儲(chǔ)引擎,包括 MyISAM、InnoDB 和 Memory 等,最常用的是 InnoDB,也是現(xiàn)在 MySQL 的默認(rèn)存儲(chǔ)引擎。存儲(chǔ)引擎也可以在創(chuàng)建表的時(shí)候手動(dòng)指定,比如下面 

  1. CREATE TABLE t (i INT) ENGINE = <Storage Engine>

然后我們就可以探討 MySQL 的執(zhí)行過(guò)程了

連接器

首先需要在 MySQL 客戶端登陸才能使用,所以需要一個(gè)連接器來(lái)連接用戶和 MySQL 數(shù)據(jù)庫(kù),我們一般是使用 

  1. mysql -u 用戶名 -p 密碼 

來(lái)進(jìn)行 MySQL 登陸,和服務(wù)端建立連接。在完成 TCP 握手 后,連接器會(huì)根據(jù)你輸入的用戶名和密碼驗(yàn)證你的登錄身份。如果用戶名或者密碼錯(cuò)誤,MySQL 就會(huì)提示 Access denied for user,來(lái)結(jié)束執(zhí)行。如果登錄成功后,MySQL 會(huì)根據(jù)權(quán)限表中的記錄來(lái)判定你的權(quán)限。

查詢緩存

連接完成后,你就可以執(zhí)行 SQL 語(yǔ)句了,這行邏輯就會(huì)來(lái)到第二步:查詢緩存。

MySQL 在得到一個(gè)執(zhí)行請(qǐng)求后,會(huì)首先去 查詢緩存 中查找,是否執(zhí)行過(guò)這條 SQL 語(yǔ)句,之前執(zhí)行過(guò)的語(yǔ)句以及結(jié)果會(huì)以 key-value 對(duì)的形式,被直接放在內(nèi)存中。key 是查詢語(yǔ)句,value 是查詢的結(jié)果。如果通過(guò) key 能夠查找到這條 SQL 語(yǔ)句,就直接返回 SQL 的執(zhí)行結(jié)果。

如果語(yǔ)句不在查詢緩存中,就會(huì)繼續(xù)后面的執(zhí)行階段。執(zhí)行完成后,執(zhí)行結(jié)果就會(huì)被放入查詢緩存中。可以看到,如果查詢命中緩存,MySQL 不需要執(zhí)行后面的復(fù)雜操作,就可以直接返回結(jié)果,效率會(huì)很高。

但是查詢緩存不建議使用

為什么呢?因?yàn)橹灰?MySQL 中對(duì)某一張表執(zhí)行了更新操作,那么所有的查詢緩存就會(huì)失效,對(duì)于更新頻繁的數(shù)據(jù)庫(kù)來(lái)說(shuō),查詢緩存的命中率很低。

分析器

如果沒(méi)有命中查詢,就開始執(zhí)行真正的 SQL 語(yǔ)句。

  •  首先,MySQL 會(huì)根據(jù)你寫的 SQL 語(yǔ)句進(jìn)行解析,分析器會(huì)先做 詞法分析,你寫的 SQL 就是由多個(gè)字符串和空格組成的一條 SQL 語(yǔ)句,MySQL 需要識(shí)別出里面的字符串是什么,代表什么。
  •  然后進(jìn)行 語(yǔ)法分析,根據(jù)詞法分析的結(jié)果, 語(yǔ)法分析器會(huì)根據(jù)語(yǔ)法規(guī)則,判斷你輸入的這個(gè) SQL 語(yǔ)句是否滿足 MySQL 語(yǔ)法。如果 SQL 語(yǔ)句不正確,就會(huì)提示 You have an error in your SQL syntax

優(yōu)化器

經(jīng)過(guò)分析器的詞法分析和語(yǔ)法分析后,你這條 SQL 就合法了,MySQL 就知道你要做什么了。但是在執(zhí)行前,還需要進(jìn)行優(yōu)化器的處理,優(yōu)化器會(huì)判斷你使用了哪種索引,使用了何種連接,優(yōu)化器的作用就是確定效率最高的執(zhí)行方案。

執(zhí)行器

MySQL 通過(guò)分析器知道了你的 SQL 語(yǔ)句是否合法,你想要做什么操作,通過(guò)優(yōu)化器知道了該怎么做效率最高,然后就進(jìn)入了執(zhí)行階段,開始執(zhí)行這條 SQL 語(yǔ)句

在執(zhí)行階段,MySQL 首先會(huì)判斷你有沒(méi)有執(zhí)行這條語(yǔ)句的權(quán)限,沒(méi)有權(quán)限的話,就會(huì)返回沒(méi)有權(quán)限的錯(cuò)誤。如果有權(quán)限,就打開表繼續(xù)執(zhí)行。打開表的時(shí)候,執(zhí)行器就會(huì)根據(jù)表的引擎定義,去使用這個(gè)引擎提供的接口。對(duì)于有索引的表,執(zhí)行的邏輯也差不多。

至此,MySQL 對(duì)于一條語(yǔ)句的執(zhí)行過(guò)程也就完成了。

SQL 的執(zhí)行順序

我們?cè)诰帉懸粋€(gè)查詢語(yǔ)句的時(shí)候 

  1. SELECT DISTINCT  
  2.     < select_list >  
  3. FROM  
  4.     < left_table > < join_type >  
  5. JOIN < right_table > ON < join_condition >  
  6. WHERE  
  7.     < where_condition >  
  8. GROUP BY  
  9.     < group_by_list >  
  10. HAVING  
  11.     < having_condition >  
  12. ORDER BY  
  13.     < order_by_condition >  
  14. LIMIT < limit_number > 

它的執(zhí)行順序你知道嗎?這道題就給你一個(gè)回答。

FROM 連接

首先,對(duì) SELECT 語(yǔ)句執(zhí)行查詢時(shí),對(duì)FROM 關(guān)鍵字兩邊的表執(zhí)行連接,會(huì)形成笛卡爾積,這時(shí)候會(huì)產(chǎn)生一個(gè)虛表VT1(virtual table)

    “    首先先來(lái)解釋一下什么是笛卡爾積    現(xiàn)在我們有兩個(gè)集合 A = {0,1} , B = {2,3,4}    那么,集合 A * B 得到的結(jié)果就是    A * B = {(0,2)、(1,2)、(0,3)、(1,3)、(0,4)、(1,4)};    B * A = {(2,0)、{2,1}、{3,0}、{3,1}、{4,0}、(4,1)};    上面 A * B 和 B * A 的結(jié)果就可以稱為兩個(gè)集合相乘的 笛卡爾積    我們可以得出結(jié)論,A 集合和 B 集合相乘,包含了集合 A 中的元素和集合 B 中元素之和,也就是 A 元素的個(gè)數(shù) * B 元素的個(gè)數(shù)

再來(lái)解釋一下什么是虛表

    “    在 MySQL 中,有三種類型的表    一種是永久表,永久表就是創(chuàng)建以后用來(lái)長(zhǎng)期保存數(shù)據(jù)的表    一種是臨時(shí)表,臨時(shí)表也有兩類,一種是和永久表一樣,只保存臨時(shí)數(shù)據(jù),但是能夠長(zhǎng)久存在的;還有一種是臨時(shí)創(chuàng)建的,SQL 語(yǔ)句執(zhí)行完成就會(huì)刪除。    一種是虛表,虛表其實(shí)就是視圖,數(shù)據(jù)可能會(huì)來(lái)自多張表的執(zhí)行結(jié)果。

ON 過(guò)濾

然后對(duì) FROM 連接的結(jié)果進(jìn)行 ON 篩選,創(chuàng)建 VT2,把符合記錄的條件存在 VT2 中。

JOIN 連接

第三步,如果是 OUTER JOIN(left join、right join) ,那么這一步就將添加外部行,如果是 left join 就把 ON 過(guò)濾條件的左表添加進(jìn)來(lái),如果是 right join ,就把右表添加進(jìn)來(lái),從而生成新的虛擬表 VT3。

WHERE 過(guò)濾

第四步,是執(zhí)行 WHERE 過(guò)濾器,對(duì)上一步生產(chǎn)的虛擬表引用 WHERE 篩選,生成虛擬表 VT4。

WHERE 和 ON 的區(qū)別

  •  如果有外部列,ON 針對(duì)過(guò)濾的是關(guān)聯(lián)表,主表(保留表)會(huì)返回所有的列;
  •  如果沒(méi)有添加外部列,兩者的效果是一樣的;

應(yīng)用

    對(duì)主表的過(guò)濾應(yīng)該使用 WHERE;

    對(duì)于關(guān)聯(lián)表,先條件查詢后連接則用 ON,先連接后條件查詢則用 WHERE;

GROUP BY

根據(jù) group by 字句中的列,會(huì)對(duì) VT4 中的記錄進(jìn)行分組操作,產(chǎn)生虛擬機(jī)表 VT5。果應(yīng)用了group by,那么后面的所有步驟都只能得到的 VT5 的列或者是聚合函數(shù)(count、sum、avg等)。

HAVING

緊跟著 GROUP BY 字句后面的是 HAVING,使用 HAVING 過(guò)濾,會(huì)把符合條件的放在 VT6

SELECT

第七步才會(huì)執(zhí)行 SELECT 語(yǔ)句,將 VT6 中的結(jié)果按照 SELECT 進(jìn)行刷選,生成 VT7

DISTINCT

在第八步中,會(huì)對(duì) TV7 生成的記錄進(jìn)行去重操作,生成 VT8。事實(shí)上如果應(yīng)用了 group by 子句那么 distinct 是多余的,原因同樣在于,分組的時(shí)候是將列中唯一的值分成一組,同時(shí)只為每一組返回一行記錄,那么所以的記錄都將是不相同的。

ORDER BY

應(yīng)用 order by 子句。按照 order_by_condition 排序 VT8,此時(shí)返回的一個(gè)游標(biāo),而不是虛擬表。sql 是基于集合的理論的,集合不會(huì)預(yù)先對(duì)他的行排序,它只是成員的邏輯集合,成員的順序是無(wú)關(guān)緊要的。

SQL 語(yǔ)句執(zhí)行的過(guò)程如下

什么是臨時(shí)表,何時(shí)刪除臨時(shí)表

什么是臨時(shí)表?MySQL 在執(zhí)行 SQL 語(yǔ)句的過(guò)程中,通常會(huì)臨時(shí)創(chuàng)建一些存儲(chǔ)中間結(jié)果集的表,臨時(shí)表只對(duì)當(dāng)前連接可見(jiàn),在連接關(guān)閉時(shí),臨時(shí)表會(huì)被刪除并釋放所有表空間。

臨時(shí)表分為兩種:一種是內(nèi)存臨時(shí)表,一種是磁盤臨時(shí)表,什么區(qū)別呢??jī)?nèi)存臨時(shí)表使用的是 MEMORY 存儲(chǔ)引擎,而臨時(shí)表采用的是 MyISAM 存儲(chǔ)引擎。

    “    MEMORY 存儲(chǔ)引擎:memory 是 MySQL 中一類特殊的存儲(chǔ)引擎,它使用存儲(chǔ)在內(nèi)容中的內(nèi)容來(lái)創(chuàng)建表,而且數(shù)據(jù)全部放在內(nèi)存中。每個(gè)基于 MEMORY 存儲(chǔ)引擎的表實(shí)際對(duì)應(yīng)一個(gè)磁盤文件。該文件的文件名與表名相同,類型為 frm 類型。而其數(shù)據(jù)文件,都是存儲(chǔ)在內(nèi)存中,這樣有利于數(shù)據(jù)的快速處理,提高整個(gè)表的效率。MEMORY 用到的很少,因?yàn)樗前褦?shù)據(jù)存到內(nèi)存中,如果內(nèi)存出現(xiàn)異常就會(huì)影響數(shù)據(jù)。如果重啟或者關(guān)機(jī),所有數(shù)據(jù)都會(huì)消失。因此,基于 MEMORY 的表的生命周期很短,一般是一次性的。

MySQL 會(huì)在下面這幾種情況產(chǎn)生臨時(shí)表

  •  使用 UNION 查詢:UNION 有兩種,一種是UNION ,一種是 UNION ALL ,它們都用于聯(lián)合查詢;區(qū)別是 使用 UNION 會(huì)去掉兩個(gè)表中的重復(fù)數(shù)據(jù),相當(dāng)于對(duì)結(jié)果集做了一下去重(distinct)。使用 UNION ALL,則不會(huì)排重,返回所有的行。使用 UNION 查詢會(huì)產(chǎn)生臨時(shí)表。
  •  使用 TEMPTABLE 算法或者是 UNION 查詢中的視圖。TEMPTABLE 算法是一種創(chuàng)建臨時(shí)表的算法,它是將結(jié)果放置到臨時(shí)表中,意味這要 MySQL 要先創(chuàng)建好一個(gè)臨時(shí)表,然后將結(jié)果放到臨時(shí)表中去,然后再使用這個(gè)臨時(shí)表進(jìn)行相應(yīng)的查詢。
  •  ORDER BY 和 GROUP BY 的子句不一樣時(shí)也會(huì)產(chǎn)生臨時(shí)表。
  •  DISTINCT 查詢并且加上 ORDER BY 時(shí);
  •  SQL 用到 SQL_SMALL_RESULT 選項(xiàng)時(shí);如果查詢結(jié)果比較小的時(shí)候,可以加上 SQL_SMALL_RESULT 來(lái)優(yōu)化,產(chǎn)生臨時(shí)表
  •  FROM 中的子查詢;
  •  EXPLAIN 查看執(zhí)行計(jì)劃結(jié)果的 Extra 列中,如果使用 Using Temporary 就表示會(huì)用到臨時(shí)表。

MySQL 常見(jiàn)索引類型

索引是存儲(chǔ)在一張表中特定列上的數(shù)據(jù)結(jié)構(gòu),索引是在列上創(chuàng)建的。并且,索引是一種數(shù)據(jù)結(jié)構(gòu)。

在 MySQL 中,主要有下面這幾種索引

  •  全局索引(FULLTEXT):全局索引,目前只有 MyISAM 引擎支持全局索引,它的出現(xiàn)是為了解決針對(duì)文本的模糊查詢效率較低的問(wèn)題。
  •  哈希索引(HASH):哈希索引是 MySQL 中用到的唯一 key-value 鍵值對(duì)的數(shù)據(jù)結(jié)構(gòu),很適合作為索引。HASH 索引具有一次定位的好處,不需要像樹那樣逐個(gè)節(jié)點(diǎn)查找,但是這種查找適合應(yīng)用于查找單個(gè)鍵的情況,對(duì)于范圍查找,HASH 索引的性能就會(huì)很低。
  •  B-Tree 索引:B 就是 Balance 的意思,BTree 是一種平衡樹,它有很多變種,最常見(jiàn)的就是 B+ Tree,它被 MySQL 廣泛使用。
  •  R-Tree 索引:R-Tree 在 MySQL 很少使用,僅支持 geometry 數(shù)據(jù)類型,支持該類型的存儲(chǔ)引擎只有MyISAM、BDb、InnoDb、NDb、Archive幾種,相對(duì)于 B-Tree 來(lái)說(shuō),R-Tree 的優(yōu)勢(shì)在于范圍查找。

varchar 和 char 的區(qū)別和使用場(chǎng)景

MySQL 中沒(méi)有 nvarchar 數(shù)據(jù)類型,所以直接比較的是 varchar 和 char 的區(qū)別

char :表示的是定長(zhǎng)的字符串,當(dāng)你輸入小于指定的數(shù)目,比如你指定的數(shù)目是 char(6),當(dāng)你輸入小于 6 個(gè)字符的時(shí)候,char 會(huì)在你最后一個(gè)字符后面補(bǔ)空值。當(dāng)你輸入超過(guò)指定允許最大長(zhǎng)度后,MySQL 會(huì)報(bào)錯(cuò)

varchar:varchar 指的是長(zhǎng)度為 n 個(gè)字節(jié)的可變長(zhǎng)度,并且是非Unicode的字符數(shù)據(jù)。n 值是介于 1 - 8000 之間的數(shù)值。存儲(chǔ)大小為實(shí)際大小。

       Unicode 是一種字符編碼方案,它為每種語(yǔ)言中的每個(gè)字符都設(shè)定了統(tǒng)一唯一的二進(jìn)制編碼,以實(shí)現(xiàn)跨語(yǔ)言、跨平臺(tái)進(jìn)行文本轉(zhuǎn)換、處理的要求

使用 char 存儲(chǔ)定長(zhǎng)的數(shù)據(jù)非常方便、char 檢索效率高,無(wú)論你存儲(chǔ)的數(shù)據(jù)是否到了 10 個(gè)字節(jié),都要去占用 10 字節(jié)的空間

使用 varchar 可以存儲(chǔ)變長(zhǎng)的數(shù)據(jù),但存儲(chǔ)效率沒(méi)有 char 高。

什么是 內(nèi)連接、外連接、交叉連接、笛卡爾積

連接的方式主要有三種:外連接、內(nèi)鏈接、交叉連接

  •  外連接(OUTER JOIN):外連接分為三種,分別是左外連接(LEFT OUTER JOIN 或 LEFT JOIN) 、右外連接(RIGHT OUTER JOIN 或 RIGHT JOIN) 、全外連接(FULL OUTER JOIN 或 FULL JOIN)

左外連接:又稱為左連接,這種連接方式會(huì)顯示左表不符合條件的數(shù)據(jù)行,右邊不符合條件的數(shù)據(jù)行直接顯示 NULL

右外連接:也被稱為右連接,他與左連接相對(duì),這種連接方式會(huì)顯示右表不      符合條件的數(shù)據(jù)行,左表不符合條件的數(shù)據(jù)行直接顯示 NULL

 

MySQL 暫不支持全外連接

  •  內(nèi)連接(INNER JOIN):結(jié)合兩個(gè)表中相同的字段,返回關(guān)聯(lián)字段相符的記錄。

 

  •  笛卡爾積(Cartesian product):我在上面提到了笛卡爾積,為了方便,下面再列出來(lái)一下。

    “    現(xiàn)在我們有兩個(gè)集合 A = {0,1} , B = {2,3,4}    那么,集合 A * B 得到的結(jié)果就是    A * B = {(0,2)、(1,2)、(0,3)、(1,3)、(0,4)、(1,4)};    B * A = {(2,0)、{2,1}、{3,0}、{3,1}、{4,0}、(4,1)};    上面 A * B 和 B * A 的結(jié)果就可以稱為兩個(gè)集合相乘的 笛卡爾積    我們可以得出結(jié)論,A 集合和 B 集合相乘,包含了集合 A 中的元素和集合 B 中元素之和,也就是 A 元素的個(gè)數(shù) * B 元素的個(gè)數(shù)

  •  交叉連接的原文是Cross join ,就是笛卡爾積在 SQL 中的實(shí)現(xiàn),SQL中使用關(guān)鍵字CROSS JOIN來(lái)表示交叉連接,在交叉連接中,隨便增加一個(gè)表的字段,都會(huì)對(duì)結(jié)果造成很大的影響。   
  1. SELECT * FROM t_Class a CROSS JOIN t_Student b WHERE a.classid=b.classid 

或者不用 CROSS JOIN,直接用 FROM 也能表示交叉連接的效果   

  1. SELECT * FROM t_Class a ,t_Student b WHERE a.classid=b.classid 

如果表中字段比較多,不適宜用交叉連接,交叉連接的效率比較差。

  •  全連接:全連接也就是 full join,MySQL 中不支持全連接,但是可以使用其他連接查詢來(lái)模擬全連接,可以使用 UNION 和 UNION ALL 進(jìn)行模擬。例如   
  1. (select colum1,colum2...columN from tableA ) union (select colum1,colum2...columN from tableB )  
  2.    或   
  3. (select colum1,colum2...columN from tableA ) union all (select colum1,colum2...columN from tableB ); 

    使用 UNION 和 UNION ALL 的注意事項(xiàng)

               通過(guò) union 連接的 SQL 分別單獨(dú)取出的列數(shù)必須相同        使用 union 時(shí),多個(gè)相等的行將會(huì)被合并,由于合并比較耗時(shí),一般不直接使用 union 進(jìn)行合并,而是通常采用 union all 進(jìn)行合并

談?wù)?SQL 優(yōu)化的經(jīng)驗(yàn)

  •  查詢語(yǔ)句無(wú)論是使用哪種判斷條件 等于、小于、大于, WHERE 左側(cè)的條件查詢字段不要使用函數(shù)或者表達(dá)式
  •  使用 EXPLAIN 命令優(yōu)化你的 SELECT 查詢,對(duì)于復(fù)雜、效率低的 sql 語(yǔ)句,我們通常是使用 explain sql 來(lái)分析這條 sql 語(yǔ)句,這樣方便我們分析,進(jìn)行優(yōu)化。
  •  當(dāng)你的 SELECT 查詢語(yǔ)句只需要使用一條記錄時(shí),要使用 LIMIT 1
  •  不要直接使用 SELECT *,而應(yīng)該使用具體需要查詢的表字段,因?yàn)槭褂?EXPLAIN 進(jìn)行分析時(shí),SELECT * 使用的是全表掃描,也就是 type = all。
  •  為每一張表設(shè)置一個(gè) ID 屬性
  •  避免在 WHERE 字句中對(duì)字段進(jìn)行 NULL 判斷
  •  避免在 WHERE 中使用 != 或 <> 操作符
  •  使用 BETWEEN AND 替代 IN
  •  為搜索字段創(chuàng)建索引
  •  選擇正確的存儲(chǔ)引擎,InnoDB 、MyISAM 、MEMORY 等
  •  使用 LIKE %abc% 不會(huì)走索引,而使用 LIKE abc% 會(huì)走索引
  •  對(duì)于枚舉類型的字段(即有固定羅列值的字段),建議使用ENUM而不是VARCHAR,如性別、星期、類型、類別等
  •  拆分大的 DELETE 或 INSERT 語(yǔ)句
  •  選擇合適的字段類型,選擇標(biāo)準(zhǔn)是 盡可能小、盡可能定長(zhǎng)、盡可能使用整數(shù)。
  •  字段設(shè)計(jì)盡可能使用 NOT NULL
  •  進(jìn)行水平切割或者垂直分割

        水平分割:通過(guò)建立結(jié)構(gòu)相同的幾張表分別存儲(chǔ)數(shù)據(jù)    垂直分割:將經(jīng)常一起使用的字段放在一個(gè)單獨(dú)的表中,分割后的表記錄之間是一一對(duì)應(yīng)關(guān)系。 

 

責(zé)任編輯:龐桂玉 來(lái)源: 數(shù)據(jù)庫(kù)開發(fā)
相關(guān)推薦

2010-11-26 10:53:29

戴爾

2024-06-04 14:52:28

2021-03-04 09:35:54

thisJavaScript開發(fā)

2021-10-28 11:40:58

回文鏈表面試題數(shù)據(jù)結(jié)構(gòu)

2020-11-13 16:00:57

SpringCloud面試架構(gòu)

2024-10-11 17:09:27

2024-02-26 15:35:44

2024-04-15 08:34:43

2024-04-28 08:23:18

2023-09-21 14:55:24

Web 開發(fā)TypeScript

2024-01-01 15:30:59

JavaScriptWeb 應(yīng)用程序開發(fā)

2021-03-01 09:39:34

閉包JavaScript開發(fā)

2021-05-08 14:20:27

Redis面試數(shù)據(jù)庫(kù)

2018-03-06 15:30:47

Java面試題

2019-02-18 11:20:59

shell面試題命令

2011-05-23 11:27:32

面試題面試java

2019-05-15 16:45:13

SpringBoot面試題Java

2022-02-11 14:01:22

底層String字符串

2018-02-25 16:35:32

前端CSS面試題

2021-10-26 11:45:22

Vue面試前端
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)

极品在线视频| 国产婷婷在线视频| 香蕉久久精品| 欧美日韩午夜影院| 国产一线二线三线女| 污视频在线免费| 久久精品国产久精国产| 久久久免费电影| 国产精品999.| 北岛玲heyzo一区二区| 国产精品国产三级国产专播品爱网 | 国产精品久久久久久模特| 在线观看欧美日韩| yjizz视频| 免费成人黄色网| 亚洲r级在线视频| 在线观看成人一级片| 天堂av中文字幕| 精品一区二区综合| 日韩美女免费视频| 免费在线观看黄色av| 精品一区二区三区在线| 精品国产一区久久| 亚洲一区日韩精品| gay欧美网站| 亚洲福利国产精品| 在线精品亚洲一区二区| 噜噜噜在线观看播放视频| 国产风韵犹存在线视精品| 国产精品电影在线观看| 日韩xxxxxxxxx| 欧美暴力喷水在线| 色噜噜狠狠狠综合曰曰曰88av| 星空大象在线观看免费播放| 日韩精品一级| 欧美男生操女生| 天天插天天操天天射| 欧美伦理91| 亚洲成人在线免费| 黄色一级片国产| 大片免费在线观看| 国产精品久久毛片a| 午夜精品一区二区三区在线观看| 天天干天天操av| 成人免费va视频| 成人免费看片网站| 亚洲成人久久精品| 国产成人午夜精品5599| 国产精品丝袜高跟| 在线观看国产成人| 美腿丝袜亚洲综合| 国产精品综合网站| 亚洲中文字幕在线观看| 青青草国产成人av片免费| 欧美在线视频在线播放完整版免费观看| 欧美日韩大片在线观看| 午夜激情一区| 欧美黄色三级网站| 国产精品.www| 最新成人av网站| 7m精品福利视频导航| 久久亚洲天堂网| 日韩国产一区二| 国产精品久久中文| 国产精品呻吟久久| 国产jizzjizz一区二区| 国产精品精品软件视频| 天天操天天干天天爱| 91视频观看视频| 欧美在线一二三区| 九义人在线观看完整免费版电视剧| 国产精品麻豆一区二区| 精品一区二区三区毛片| 七七久久电影网| 五月天国产精品| 国产成人无码av在线播放dvd| 日韩av超清在线观看| 欧美午夜理伦三级在线观看| 中文字幕成人免费视频| 亚洲精品aⅴ| 日韩成人av网址| 亚洲色成人网站www永久四虎| 欧美好骚综合网| 久久综合久久八八| 国产奶水涨喷在线播放| 久久经典综合| 亚洲影院高清在线| 国 产 黄 色 大 片| 99久久久精品| 一区二区三区四区视频在线| 制服丝袜在线播放| 欧美性猛交xxxx免费看漫画| 欧美婷婷精品激情| 国产精品白丝av嫩草影院| 亚洲欧美激情在线视频| 亚洲女人久久久| 在线综合视频| 成人在线激情视频| 午夜成人鲁丝片午夜精品| 国产精品萝li| 欧美日韩一道本| 99综合久久| 亚洲精品网址在线观看| 日本妇女毛茸茸| 日韩精品一二区| 波多野结衣一区二区三区在线观看| 你懂的在线网址| 一区二区在线看| 特级丰满少妇一级| 窝窝社区一区二区| 九九热最新视频//这里只有精品| 亚洲精品中文字幕乱码三区91| 韩国毛片一区二区三区| 欧洲一区二区在线观看| av免费在线视| 91麻豆精品国产91久久久久| 欧洲美一区二区三区亚洲| 韩国在线视频一区| 国产一区二区色| 九色蝌蚪在线| 精品国产乱码久久久久久婷婷| 污污的视频免费观看| 国产一区国产二区国产三区| 欧美激情第1页| 国产区精品在线| 亚洲国产精华液网站w| www.爱色av.com| 6080成人| 欧美激情奇米色| 99精品在线看| 亚洲人成精品久久久久久 | 久久精品国产免费看久久精品| 久久久婷婷一区二区三区不卡| 女子免费在线观看视频www| 欧美日韩国产高清一区| 阿v天堂2014| 老司机精品久久| 免费久久一级欧美特大黄| zzzwww在线看片免费| 亚洲第一网站免费视频| 精品深夜av无码一区二区老年| 国产麻豆午夜三级精品| 99精品一级欧美片免费播放| 色综合.com| 色偷偷综合社区| 在线观看一二三区| 国产精品免费视频网站| 小泽玛利亚视频在线观看| 人人狠狠综合久久亚洲婷婷| 国产精品精品久久久| 国产三级电影在线观看| 一本到一区二区三区| 亚洲理论片在线观看| 日本在线播放一区二区三区| 日韩中文一区| 欧美成人毛片| 久久亚洲精品中文字幕冲田杏梨| 国产伦精品一区二区三区视频痴汉| 国产精品久久777777| 在线a免费观看| 国产精品久久| 免费看污久久久| 成人黄页网站视频| 久久天天躁夜夜躁狠狠躁2022| 国产熟女一区二区三区五月婷| 一区二区三区在线免费播放| 337p日本欧洲亚洲大胆张筱雨 | 国内精品美女av在线播放| 天堂网av在线播放| 色猫猫国产区一区二在线视频| 精品无码在线观看| 国产综合一区二区| a天堂资源在线观看| 日韩成人午夜| 国产精品久久久久久av福利| 九七久久人人| 精品福利在线导航| 无码人妻黑人中文字幕| 国产精品剧情在线亚洲| 69xxx免费视频| 久久久久久婷| 影音先锋欧美资源| 久久亚州av| 国产精品美女www| 久久99亚洲网美利坚合众国| 亚洲欧美日韩精品久久奇米色影视 | 黄色国产在线观看| 免费观看一级特黄欧美大片| 精品人妻大屁股白浆无码| 日韩超碰人人爽人人做人人添| 国产精品一区=区| 国产盗摄一区二区| 在线电影av不卡网址| 亚洲欧美激情国产综合久久久| 一本一本大道香蕉久在线精品| 最新av电影网站| 97精品电影院| 91精品999| 亚洲欧美日韩综合国产aⅴ| 日韩视频在线免费播放| 三级欧美日韩| 97超级碰碰碰| 91蜜桃在线视频| 国产亚洲人成网站在线观看| 亚洲高清在线观看视频| 在线观看成人小视频| 99免费在线观看| 亚洲色图.com| 国产成人免费观看网站| 成人免费毛片嘿嘿连载视频| www午夜视频| 麻豆成人在线| 日韩网站在线免费观看| 99久久99视频只有精品| 欧美13一14另类| 136国产福利精品导航网址应用| 国产精品女人网站| 少妇视频一区| 久久全国免费视频| 超碰在线免费播放| 中文字幕亚洲第一| 可以直接在线观看的av| 日韩激情视频在线播放| 亚洲av少妇一区二区在线观看| 欧美日韩亚洲综合| 在线观看日本网站| 欧美午夜精品伦理| 日韩福利片在线观看| 一区二区三区中文免费| 登山的目的在线| 国产欧美日韩亚州综合| aaaaa级少妇高潮大片免费看| 国产激情一区二区三区四区| 亚洲欧美手机在线| 久久99久久久久| 老司机久久精品| 蜜桃免费网站一区二区三区| 精品久久久久久中文字幕2017| 国产欧美成人| 欧美极品欧美精品欧美图片| 日韩视频中文| 国产极品粉嫩福利姬萌白酱| 9色精品在线| 男人日女人bb视频| 性伦欧美刺激片在线观看| 日本福利视频在线| 新67194成人永久网站| 久久国产精品视频在线观看| 亚洲国产高清一区二区三区| 成人网站免费观看入口| 亚洲福利国产| 黄色一级片播放| 久久久久国产精品一区二区 | 韩国v欧美v日本v亚洲v| 欧洲美女亚洲激情| 国产精品综合av一区二区国产馆| 日本黄色一级网站| 波多野结衣一区二区三区| 免费a v网站| 久久免费视频色| 欧美自拍偷拍网| 亚洲精品中文字幕乱码三区| 九九九在线视频| 精品久久久久久久久久国产 | 爱爱视频免费在线观看| 亚洲伦理在线精品| 国产精选第一页| 色综合天天性综合| 一级黄色片免费| 日韩欧美一区在线| 青青青草原在线| 中文字幕一区二区三区电影| 黄色网页在线播放| 国内精品美女av在线播放| 超碰国产一区| 91九色蝌蚪国产| 国产精品色在线网站| 欧美一区二区综合| 欧美成人一区二免费视频软件| 日本a在线免费观看| 日韩国产在线一| 亚洲国产欧美日韩在线| 2021国产精品久久精品| 欧美福利在线视频| 午夜久久电影网| 在线免费看毛片| 亚洲成av人影院在线观看| 成年网站在线| 欧美日韩福利在线观看| 写真福利精品福利在线观看| 成人精品在线视频| 日韩电影不卡一区| 91手机视频在线| 国产精品一二| 国产大片一区二区三区| 99re这里只有精品首页| 少妇太紧太爽又黄又硬又爽小说| 一区二区三区精品在线| 欧美另类高清videos的特点| 欧美精品一区二区精品网| 国产精品四虎| 韩国视频理论视频久久| 亚洲成a人片777777久久| 蜜桃91精品入口| 欧美精品aa| www.com黄色片| 99re这里都是精品| 超碰手机在线观看| 欧美午夜精品电影| 亚州视频一区二区三区| 九色精品美女在线| 欧美成人家庭影院| 日韩精品久久久毛片一区二区| 伊人久久大香线蕉综合热线| 国产成年人视频网站| 国产亚洲精品bt天堂精选| 亚欧视频在线观看| 日韩免费观看高清完整版| 巨大荫蒂视频欧美大片| 国产精品欧美日韩| 九一国产精品| 黄色一级片播放| 不卡视频一二三| 国产性70yerg老太| 欧美一区二区三级| 黄色在线视频网站| 国产精品久久色| 欧美中文一区二区| 人人爽人人av| 国产日韩影视精品| 日本高清不卡码| 日韩精品视频免费专区在线播放 | 亚洲国产精品久久久久婷婷884| 一本色道久久综合无码人妻| 国产亚洲激情视频在线| av日韩亚洲| 久久久久se| 国产免费成人| 国产精品无码网站| 色成年激情久久综合| 青青青草原在线| 国产极品精品在线观看| 久久不卡国产精品一区二区 | 国产一区二区三区影视| 欧美日韩成人一区二区三区 | 国产成人在线一区二区| 久久av免费| 韩国中文字幕av| 国产精品美女久久久久久久| 中文字幕无码乱码人妻日韩精品| 国产亚洲欧美aaaa| 欧美成人三级| 91麻豆天美传媒在线| 国产福利精品一区二区| 国产一级二级三级| 亚洲国产欧美自拍| 老司机深夜福利在线观看| 蜜桃导航-精品导航| 久久一区视频| 91制片厂在线| 日韩欧美国产麻豆| 天堂а√在线最新版中文在线| 免费一区二区三区在在线视频| 久久视频一区| 国产wwwwxxxx| 精品播放一区二区| 无码小电影在线观看网站免费 | 午夜精品久久99蜜桃的功能介绍| 日本wwww色| 狠狠躁天天躁日日躁欧美| 国产女主播在线写真| 91免费精品视频| 在线视频观看日韩| 老头老太做爰xxx视频| 制服丝袜av成人在线看| 日本无删减在线| 欧美日韩三区四区| 久草在线在线精品观看| 久久久久久久久久99| 亚洲毛片在线观看.| 日本免费成人| 精品久久一二三| 中文字幕不卡在线| 好男人在线视频www| 国产不卡av在线| 一区二区三区毛片免费| chinese麻豆新拍video| 欧美色手机在线观看| 午夜av在线播放| 欧美在线3区| 成人一区二区三区| 中文字幕在线播放av| 午夜精品久久久久久久久久久久 | 妺妺窝人体色www看人体| 久久久综合网站| 亚洲精品97久久中文字幕无码| 国产精品91免费在线| 亚洲小说欧美另类社区| 免费黄色国产视频| 日韩高清免费观看|