最新要闻
- 券商观点|定制家居行业专题研究:整家与整装战略落地,需求有望逐步改善
- 全球热讯:超图软件:公司与Unity有紧密的技术合作
- 聚焦:重大突破!华为发布首款全栈自主数据库GaussDB:真正属于中国人自己的数据库来了
- 1小时收费6.5元!共享单车悄然涨价超地铁:你还用吗?
- 宝马轿车被追尾 贬值损失能赔吗
- 环球视点!kp什么意思网络用语(网络上kp是什么意思)
- 滞困异星黎明MOTOR-FIGURE种子是什么|热点评
- 海力布石头图片真实
- 众星为高考学子加油打气 周冬雨被曝高考仅 286 分-前沿热点
- 世界消息!天元宠物:6月6日融资买入131.17万元,融资融券余额2873.89万元
- 公路交通工程专业承包资质机构_公路交通工程专业承包资质
- 我市公布海洋公益诉讼成果 发布海洋公益诉讼协同治理最佳方案、海洋公益诉讼十佳案例等|当前热文
- 猪的智商很高吗?_猪的智商高吗
- 晶升股份、唯捷创芯等16只科创板股融资余额增幅超10%_新资讯
- 2023年6月7日山东省二乙氨基乙醇价格最新行情预测|环球时快讯
- 男子花147万买保时捷提车2天就坏了!4S店:赔8000元代金券
广告
手机
iphone11大小尺寸是多少?苹果iPhone11和iPhone13的区别是什么?
警方通报辅警执法直播中被撞飞:犯罪嫌疑人已投案
- iphone11大小尺寸是多少?苹果iPhone11和iPhone13的区别是什么?
- 警方通报辅警执法直播中被撞飞:犯罪嫌疑人已投案
- 男子被关545天申国赔:获赔18万多 驳回精神抚慰金
- 3天内26名本土感染者,辽宁确诊人数已超安徽
- 广西柳州一男子因纠纷杀害三人后自首
- 洱海坠机4名机组人员被批准为烈士 数千干部群众悼念
家电
MySQL逻辑架构及执行过程
(资料图片)
一:MySQL逻辑架构
1:MySQL逻辑架构
客户端进程发送请求后服务器进程对接受的客户端请求做了什么处理,才能产生最后的处理结果呢?下面就看看大致的逻辑架构图
上图基本组件介绍:连接层:Connectors【连接器】:MySQL服务之外的客户端程序请求MySQL或进行权限验证 Connection Pool【连接池】:提供了多个用于客户端与服务器端交互的线程 服务层:SQL Interface【SQL接口】:接收SQL指令,返回处理结构(其实就是执行命令的入口) Parser【SQL解析器】:SQL语法语义的解析,生成语法树 Optimizer【优化器】:核心组件,对生成的语法树进行优化,生成最优方式执行 Caches & Buffers【查询缓存】:MySQL8.0前组件,以SQL为Key,以结果为Value的方式缓存查询结果 引擎层:Pluggable Storage Engines【可插拔存式储引擎】:与底层文件系统进行交互 磁盘文件层:File System【文件系统】:磁盘,存储着MySQL数据的地方 Files & Logs【日志文件】:记录着日志信息Ⅰ:连接层:客户端(应用)访问MySQL服务器前,做的第一件事就是建立 TCP 连接,当客户端(应用)连接到MySQL服务器时, 服务器需要对其进行认证。认证基于用户名、原始主机信息和密码。经过三次握手建立连接成功后,MySQL服务器对TCP 传输过来的账号密码做身份认证、权限获取。 ①:当用户名或密码不对,会收到一个Access denied for user错误,客户端程序结束执行 ②:用户名密码认证通过,会从权限表查出账号拥有的权限与连接关联,之后的权限判断逻辑,都将依赖于此时读到的权限 注:TCP连接收到请求后,必须要分配给一个线程专门与这个客户端的交互。所以还会有个线程池,去走后面的流程。 每一个连接从线程池中获取线程,断开连接则归还线程池,这样省去了创建和销毁线程的开销。Ⅱ:服务层: ①:SQL Interface: SQL接口接收用户的SQL命令,并且返回用户需要查询的结果。比如SELECT ... FROM就是调用SQL Interface MySQL支持DML(数据操作语言)、DDL(数据定义语言)、存储过程、视图、触发器、自定义函数等多种SQL语言接口 注:SQL接口就像我们Java的接口一样,如DML、DDL都存在抽象接口,调用后再由接口的具体实现来处理此次操作。②:Parser: 解析器▶ 在解析器中对 SQL 语句进行语法语义分析。将SQL语句分解成数据结构,并将这个结构传递到后续步骤,以后SQL语句的传递和 处理就是基于这个结构的。如果在分解语句中遇到错误,那么就说明这个SQL语句是不合理的(如语法错误)。 ▶ 其实解析器先会做“词法解析”。解析我们输入的多个字符串和空格组成的一条SQL语句,MySQL需要识别出里面的字符串分别是 什么,代表什么。最终会被解析器验证和解析,并为其创建语法树,并根据数据字典丰富查询语法树,会验证该客户端是否具 有执行该查询的权限。创建好语法树后,MySQL优化器还会对SQL查询进行语法上的优化,进行查询重写。③:Optimizer: 查询优化器▶ 执行完解析器后,MySQL就知道要干什么了。但接下来并不是直接执行解析好的语法树,而是根据语法树生成一个具体执行计划。 ▶ 优化器拿到生成的语法树后会在优化器这一层进行优化,优化器是个非常复杂的部件,它会帮我去使用它自己认为的最好的方式 去优化这条SQL语句,执行计划会指明应该 使用哪些索引 进行查询(全表检索还是使用索引检索),表之间的连接顺序如何, 并生成一条条的执行计划。最后按照执行计划中的步骤使用执行器调用存储引擎提供的方法来真正的执行操作, 并将查询结果返回给用户。 例如:在表里面有多个索引的时候,决定使用哪个索引;或者在一个语句有多表关联(join)的时候,决定各个表的连接顺序。 比如你执行下面这样的语句,这个语句是执行两个表的join: SELECT * FROM t1 JOIN t2 USING(ID) WHERE t1.c=10 AND t2.d=20; 上述SQL语句既可以先从表t1里面取出c=10的记录的ID值,再根据ID值关联到表t2,再判断t2里面d的值是否等于20。 也可以先从表t2里面取出d=20的记录的ID值,再根据ID值关联到t1,再判断t1里面c的值是否等于10。 这两种执行方法的逻辑结果是一样的,但是执行的效率会有不同,而优化器的作用就是决定选择使用哪一个方案。④:Caches & Buffers: 查询缓存组件▶ MySQL内部维持着一些Cache和Buffer,比如Query Cache用来缓存一条SELECT语句的执行结果,在解析查询之前,服务器会 先检查查询缓存,如果能够在其中找到对应的查询,服务器就不必再执行查询解析、优化和执行的整个过程,而是直接返回查 询缓存中的结果集后通过SQL接口将结果反馈给客户端。 ▶ 其实不推荐使用查询缓存,因为查询缓存往往弊大于利。查询缓存的失效非常频繁,只要有对一个表的更新,这个表上所有的 查询缓存都会被清空。对于更新压力大的数据库来说,查询缓存的命中率会非常低。除非你的业务就是有一张静态表,很长 时间才会更新一次。比如,一个系统配置表,那这张表上的查询才适合使用查询缓存。 ▶ 其实MySQL也提供了这种“按需使用”的方式。可以将参数query_cache_type设置成DEMAND,这样对于默认的SQL语句都不使用 查询缓存。而对于确定要使用查询缓存的语句,可以用SQL_CACHE显式指定,(后面介绍缓存)如下: SELECT SQL_CACHE * FROM T WHERE ID=10; ▶ 从MySQL 5.7.20开始,不推荐使用查询缓存,并在 MySQL 8.0中删除。⑤:执行器(在查询优化器之后)MySQL通过解析器知道了你要做什么,通过优化器知道了该怎么做,于是就进入了执行器阶段,执行器会根据一系列的执行计划去 调用存储引擎的接口去完成SQL的执行。开始执行的时候,要先判断一下当前账户对这个表有没有执行的权限,如果没有,就会返 回没有权限的错误, 如下所示(如果命中查询缓存,会在查询缓存放回结果的时候,做权限验证。查询也会在优化器之前调用precheck验证权限)。 select * from T where ID=10; 如果有权限,就打开表继续执行。打开表的时候,执行器就会根据表的引擎定义,去使用这个引擎提供的接口。 比如我们这个例子中的表T中,ID字段没有索引,那么执行器的执行流程是这样的: 调用InnoDB引擎接口取这个表的第一行,判断ID值是不是10,如果不是则跳过,如果是则将这行存在结果集中; 然后再调用引擎接口取“下一行”,重复相同的判断逻辑,直到取到这个表的最后一行。执行器将上述遍历过程中所有 满足条件的行组成的记录集作为结果集返回给客户端。至此,这个语句就执行完成了。Ⅲ:引擎层:插件式存储引擎层(Storage Engines),真正的负责了MySQL中数据的存储和提取,对物理服务器级别维护的底层数据执行操作, 服务器通过API与存储引擎进行通信。不同的存储引擎具有的功能不同,这样我们可以根据自己的实际需要进行选取。 MySQL8.0.31默认支持的存储引擎如下: SHOW engines;+--------------------+---------+---------------------+--------------+------+------------+ | Engine | Support | Comment | Transactions | XA | Savepoints | +--------------------+---------+---------------------+--------------+------+------------+ | ndbcluster | NO | Clustered, fault... | NULL | NULL | NULL | | FEDERATED | NO | Federated MySQL ... | NULL | NULL | NULL | | MEMORY | YES | Hash based, stor... | NO | NO | NO | | InnoDB | DEFAULT | Supports transac... | YES | YES | YES | | PERFORMANCE_SCHEMA | YES | Performance Sche... | NO | NO | NO | | MyISAM | YES | MyISAM storage e... | NO | NO | NO | | ndbinfo | NO | MySQL Cluster sy... | NULL | NULL | NULL | | MRG_MYISAM | YES | Collection of id... | NO | NO | NO | | BLACKHOLE | YES | /dev/null storag... | NO | NO | NO | | CSV | YES | CSV storage engi... | NO | NO | NO | | ARCHIVE | YES | Archive storage ... | NO | NO | NO | +--------------------+---------+---------------------+--------------+------+------------+ 注:MySQL的存储引擎设计这么多是因为它可以随场景变化的,它可以是MYISAM、InnoDB、Memory等,所以它被设计成了插入式。Ⅳ:存储层:所有的数据,数据库、表的定义,表的每一行的内容,索引,都是存在 文件系统 上,以 文件 的方式存在的,并完成与存储引擎的 交互。当然有些存储引擎比如InnoDB,也支持不使用文件系统直接管理裸设备,但现代文件系统的实现使得这样做没有必要了。 在文件系统之下,可以使用本地磁盘,可以使用DAS、NAS、SAN等各种存储系统
2:MySQL逻辑架构总结
MySQL逻辑架构大概可以分为三层:连接层:客户端服务并不是MySQL所独有的,大多数基于网络的客户端/服务器的工具或者服务都有类似的架构。客户端发送请求后就由连接层 进行客户端去请求做处理,比如连接处理、授权认证、安全等等。Server层:大多数MySQL的核心服务功能都在这一层,包括查询解析、分析、优化、缓存以及所有的内置函数(例如,日期、时间、数学和加 密函数),所有跨存储引擎的功能都在这一层实现:存储过程、触发器、视图等。存储引擎层:第三层包含了存储引擎。存储引擎负责MySQL中数据的存储和提取。Server层通过API与存储引擎进行通信。这些接口屏蔽了不 同存储引擎之间的差异,使得这些差异对上层的查询过程透明。 值得一提的是在MySQL8.0中取消了查询缓存,大概的理由是查询缓存存在严重的可伸缩性问题,并且很容易成为严重的瓶颈缓存,将缓存移动到 客户端能收获更好的性能(后面具体说明)。
二:MySQL执行流程
1:MySQL中的执行流程
要搞清楚MySQL的执行流程之前,我们需要先搞明白几个重要的组件,一共六个组件,其实上一节有说明,具体分为: 连接器:连接MySQL服务器,进行权限验证 缓存:保存上次查询的结果,提高性能 解析器:词法与语法分析 优化器:对你的查询语句做出适当的优化 执行器:操作存储引擎,读写数据 存储引擎:存储数据MySQL的一个查询操作的完整流程: 客户端通过连接器建立TCP连接,这个操作会先分配一个线程进行权限验证,通过验证后调用对应的SQL接口,SQL接口实现会先去查询 缓存,根据SQL作为Key去查询,查询到则直接返回结果,否则调用解析器,解析器对SQL语句的语法语义解析,得到一个MySQL可以理 解的语法,随后进入优化器,MySQL会根据你的查询条件适当的优化,之后经过执行器,执行器就开始真正的调用对应的存储引擎查询 数据,最后将查询到的数据通过SQL接口返回给客户端,并且还会把查询结果写入缓存
Ⅰ:连接器:建立连接Ⅱ:查询缓存:Server如果在查询缓存中发现了这条 SQL 语句,就会直接将结果返回给客户端;如果没有,就进入到解析器阶段。 需要说明的是,因为查询缓存往往效率不高,所以在 MySQL8.0之后就抛弃了这个功能。注:大多数情况查询缓存就是个鸡肋,为什么呢? SELECT employee_id,last_name FROM employees WHERE employee_id = 101; 查询缓存是提前把查询结果缓存起来,这样下次不需要执行就可以直接拿到结果。需要说明的是,在MySQL 中的查询缓存, 不是缓存查询计划,而是查询对应的结果。这就意味着查询匹配的 鲁棒性大大降低 ,只有 相同的查询操作才会命中查询缓存。 两个查询请求在任何字符上的不同(例如:空格、注释、大小写),都会导致缓存不会命中。因此MySQL的查询缓存命中率不高。 同时,如果查询请求中包含某些系统函数、用户自定义变量和函数、一些系统表,如mysql、information_schema、 performance_schema 数据库中的表,那这个请求就不会被缓存。以某些系统函数举例,可能同样的函数的两次调用会产生不一 样的结果,比如函数 NOW ,每次调用都会产生最新的当前时间,如果在一个查询请求中调用了这个函数,那即使查询请求的文本 信息都一样,那不同时间的两次查询也应该得到不同的结果,如果在第一次查询时就缓存了,那第二次查询的时候直接使用第一次查询 的结果就是错误的! 此外,既然是缓存,那就有它 缓存失效的时候 。MySQL的缓存系统会监测涉及到的每张表,只要该表的结构或者数据被修改, 如对该表使用了INSERT 、 UPDATE 、 DELETE、 TRUNCATE TABLE 、 ALTER速缓存中删除!对于更新压力大的数据库来说, 查询缓存的命中率会非常低。Ⅲ:解析器:在解析器中对 SQL 语句进行语法分析、语义分析。
分析器先做“词法分析”。你输入的是由多个字符串和空格组成的一条 SQL 语句,MySQL需要识别出里面的字符串分别是什么, 代表什么。MySQL从你输入的"select"这个关键字识别出来,这是一个查询语分析器先做“词法分析”。你输入的是由多个字符串和 空格组成的一条 SQL 语句,MySQL需要识别出里面的字符串分别是什么,代表什么。MySQL从你输入的"select"这个关键字 识别出来,这是一个查询语句。它也要把字符串“T”识别成“表名T”,把字符串“ID”识别成“列 ID”。句。接着,要做“语法分析”。 根据词法分析的结果,语法分析器(比如:Bison)会根据语法规则,判断你输入的这个 SQL 语句是否 满足 MySQL 语法 。 select department_id,job_id,avg(salary) from employees group by department_id; 如果SQL语句正确,则会生成一个这样的语法树:
Ⅳ:优化器:在优化器中会确定 SQL 语句的执行路径,比如是根据 全表检索 ,还是根据 索引检索 等。 举例:如下语句是执行两个表的 join: select * from test1 join test2 using(ID) where test1.name="zhangwei" and test2.name="mysql高级课程"方案1:可以先从表 test1 里面取出 name="zhangwei"的记录的ID值,再根据ID值关联到表test2,再判断test2里 面name的值是否等于 "mysql高级课程"。 方案2:可以先从表 test2 里面取出 name="mysql高级课程"的记录的ID值,再根据ID值关联到test1再判断test1里 面name的值是否等于zhangwei。这两种执行方法的逻辑结果是一样的,但是执行的效率会有不同,而优化器的作用就是决定选择使用哪一个方案。优化 器阶段完成后,这个语句的执行方案就确定下来了,然后进入执行器阶段(后面讲到索引我们再谈)。 在查询优化器中,可以分为 逻辑查询 优化阶段和 物理查询 优化阶段。Ⅴ:执行器截止到现在,还没有真正去读写真实的表,仅仅只是产出了一个执行计划。于是就进入了执行器阶段。
在执行之前需要判断该用户是否具备权限。如果没有,就会返回权限错误。如果具备权限,就执行SQL查询并返回结果。 在MySQL8.0以下的版本,如果设置了查询缓存,这时会将查询结果进行缓存。 select * from test where id=1; 比如:表test中,ID字段没有索引,那么执行器的执行流程是这样的: 调用 InnoDB 引擎接口取这个表的第一行,判断ID值是不是1,如果不是则跳过,如果是则将这行存在结果集中;调用引擎 接口取“下一行”,重复相同的判断逻辑,直到取到这个表的最后一行。执行器将上述遍历过程中所有满足条件的行组成的记录 集作为结果集返回给客户端。 至此,这个语句就执行完成了。对于有索引的表,执行的逻辑也差不多。SQL语句在MySQL中的流程是: SQL语句→查询缓存→解析器→优化器→执行器。
.
关键词:
MySQL逻辑架构及执行过程
SQLYog使用教程
jenkins~权限控制 世界热推荐
一份配置轻松搞定表单渲染,配置式表单渲染器在袋鼠云的实现思路与实践
[Docker/K8S]Docker与K8S的区别
券商观点|定制家居行业专题研究:整家与整装战略落地,需求有望逐步改善
全球热讯:超图软件:公司与Unity有紧密的技术合作
聚焦:重大突破!华为发布首款全栈自主数据库GaussDB:真正属于中国人自己的数据库来了
1小时收费6.5元!共享单车悄然涨价超地铁:你还用吗?
宝马轿车被追尾 贬值损失能赔吗
环球视点!kp什么意思网络用语(网络上kp是什么意思)
滞困异星黎明MOTOR-FIGURE种子是什么|热点评
海力布石头图片真实
众星为高考学子加油打气 周冬雨被曝高考仅 286 分-前沿热点
Apache Solr 教程_编程入门自学教程_菜鸟教程-免费教程分享
世界消息!天元宠物:6月6日融资买入131.17万元,融资融券余额2873.89万元
公路交通工程专业承包资质机构_公路交通工程专业承包资质
我市公布海洋公益诉讼成果 发布海洋公益诉讼协同治理最佳方案、海洋公益诉讼十佳案例等|当前热文
猪的智商很高吗?_猪的智商高吗
晶升股份、唯捷创芯等16只科创板股融资余额增幅超10%_新资讯
2023年6月7日山东省二乙氨基乙醇价格最新行情预测|环球时快讯
男子花147万买保时捷提车2天就坏了!4S店:赔8000元代金券
全球看点:网传克扣供应商10%货款 长安汽车发声明:从未收到申诉函、已报案
珠峰获救女子不愿承担费用 律师建议起诉:农夫与蛇风气不可助长-世界焦点
天天热点评!685人晋级2023阿里巴巴全球数学竞赛决赛:清北、麻省理工高手云集
18只个股上午主力净流入超1亿元 华工科技居首 每日动态
【天天播资讯】甘肃省博物馆门票怎么预约(个人+团队)
完善养老保险体系 提高养老保障水平 短讯
讯息:南通和海牛难敌上海双雄,大连人爬坑!国安换帅吧,谢晖送斯坦利一程
涛涛车业:6月6日融资买入523.15万元,融资融券余额4265.74万元
当前观察:最新豆一期货价格行情查询(2023年6月7日)
全球关注:AI人工智能领域精美绘图模板分享
全球热讯:java HttpClient工具类
1万4千条生活小知识常识大全ACCESS\EXCEL数据库
要闻速递:【财经分析】短端利率定价基本合理 机构提示关注调整风险
世界新动态:开展12600余项减排项目 广东持续打好臭氧污染防治攻坚战
惠誉下调美国不动产相关产业评级展望至恶化 滚动
当前速讯:2023西安钟南山南五台景区高考免费活动
广东一考生着急进考场跑掉洞洞鞋:焦急光脚跑向考场_天天视点
高考时间为何定在6月?少数人能猜到 天天新消息
国产替代重大进步!华为100%自研数据库亮相 中国金融云第一
【天天快播报】AirPower“精神续作”?苹果新iPad专利塞满磁性线圈
上市不到1个月 要打比亚迪宋的哈弗枭龙系列有优惠了:立省6000块!
警用无人机空中巡飞护航高考
凌玮科技:6月6日融资买入132.66万元,融资融券余额4331.19万元
环球最新:我国部署实施2023年公海自主休渔措施
【全球快播报】香港警方国安处拘捕6人 其中2人涉嫌危害国家安全
北京城区供水已超去年最高日供水量 夏季高峰供水保障开启
C++ 友元函数-环球看点
GRPC核心概念、架构和生命周期
漳州市应急管理综合执法支队准执法保安全 护航企业促发展_每日动态
世界快资讯丨国内首个全栈自主数据库!华为云GaussDB迈出关键一步
今日快看!《敢死队4》新海报公布:杰森·斯坦森变男主!
飞凡巴赫座舱来了:全球首创主动式座椅 可自动充气放气
国内唯一!华为推出首款全栈自主数据库GaussDB:改变游戏规则
2499元起 荣耀90系列首销:全系2亿像素写真相机-世界报资讯
河北衡水一老师用2023根空笔芯打造“梦想之舟”祝福考生
余化敏调研城区集中供热项目建设 天天消息
生活诗和远方出自哪里_诗和远方出自哪里 环球新资讯
SRC赏金猎人—笔记一|每日短讯
springBoot自动装配机制
天天看点:盐系男友是什么意思_盐系少年什么意思都有些啥特点
环球信息:亿纬锂能:融资净买入1292.67万元,融资余额29.58亿元(06-06)
世界短讯!6月6日醋酐产业链价格汇总
快看:6月6日高平化工糠醇价格平稳
俄媒:卡霍夫卡大坝已坍塌近半_下游一城市水位上涨超12米
开园7年涨价4次 专家称国内建第三座迪士尼概率不大
可能是3K价位最高颜值!七彩虹iGame RTX 4060 Ti Ultra W OC 8GB评测:性能不弱于RTX 3070|世界热闻
五菱缤果减配ESC、自动驻车被投诉 车主:看海鸥卖的好了才加上 环球观速讯
世界观天下!高通骁龙8 Gen3曝光:X4超大核主频达3.7GHz 史无前例
高考首日 衡水中学高考生6点跑操:已持续数年|全球今头条
幽默小笑话大全爆笑段子_幽默小笑话大全爆笑-世界热头条
网络语不感冒是什么意思 对某人某事不太感冒是啥意思
通行宝:融资净偿还130.68万元,融资余额3646.21万元(06-06)
【环球新视野】新乡市政务服务“跨省通办”合作再添伙伴
全球视点!三天吃透Spring面试八股文
健康食物功效大全ACCESS数据库
SUID~这账怎么算?|全球快讯
魔兽世界萨尔玛在哪(wow怀旧服探索地狱火半岛成就萨尔玛位置坐标)
底层架构大改 微软Win12明年发布:英特尔AMD已做好准备 环球微动态
华为发布全球首款800GE数据中心核心交换机:支持288个800GE端口_世界新资讯
【焦点热闻】国产带头杀价 4TB SSD干到999元 PCIe 4.0硬盘首次成为主流
【快播报】江西鸭脖事件再升级!胡锡进:市监局有必要进行更加清晰的拍摄,并公之于众
安德烈·彼得莱乌
ALCO HOLDINGS(00328):资本重组已生效-即时看
天天简讯:56岁黎明素颜近照曝光,与粉丝互动接地气,冻龄容颜令人震惊
国际油价持续走低-天天时讯
世界百事通!迅雷(XNET.US)盘前一度涨超25%! 董事会批准2000万美元股票回购计划
热点!福建省三明市2023-06-04 20:41发布暴雨红色预警
微控制器实时操作系统实践2了解RTOS任务_环球微资讯
当前看点!呼伦贝尔草原上发现了千年前的岩画→
什么是房颤手术_什么是房颤
通讯!聚焦补链强链 抢抓“招商”“落地”
世界百事通!【读财报】5月上市公司定增动态:实际募资200.65亿元 北汽蓝谷和山西焦煤募资额居前
头条:新华全媒+丨七项签约!长三角生态共治再扩“新版图”
乳房一个大一个小正常吗?_乳房一个大一个小正常吗
估值超过2000亿 OpenAI暂无上市计划 :不想被资本裹挟-全球滚动
波音787“梦想客机”发现新缺陷:或推迟交付
天天最新:正面硬刚骁龙!天玑9300规格出炉:史无前例的全大核架构
观热点:6月9日上映!《变形金刚7》终极预告发布:高考完必看大片