www.久久久久|狼友网站av天堂|精品国产无码a片|一级av色欲av|91在线播放视频|亚洲无码主播在线|国产精品草久在线|明星AV网站在线|污污内射久久一区|婷婷综合视频网站

當(dāng)前位置:首頁 > 公眾號(hào)精選 > 架構(gòu)師社區(qū)
[導(dǎo)讀]面試官說:工作這么久了,應(yīng)該知道sql執(zhí)行計(jì)劃吧,講講Sql的執(zhí)行計(jì)劃吧!看了看面試官手臂上紋的大花臂和一串看不懂的韓文,吞了吞口水,暗示自己鎮(zhèn)定點(diǎn),整理了一下思緒緩緩的對(duì)面試官說:我不會(huì) 面試官:。。。。,回去等通知吧 我:%^&%$!@# 一、前言 當(dāng)我


面試官說:工作這么久了,應(yīng)該知道sql執(zhí)行計(jì)劃吧,講講Sql的執(zhí)行計(jì)劃吧!看了看面試官手臂上紋的大花臂和一串看不懂的韓文,吞了吞口水,暗示自己鎮(zhèn)定點(diǎn),整理了一下思緒緩緩的對(duì)面試官說:我不會(huì) 面試官:。。。。,回去等通知吧 我:%^&%$!@#

一、前言

當(dāng)我們工作到了一定的年限之后,一些應(yīng)該掌握的知識(shí)點(diǎn),我們是必須需要去了解的,比如今天面試官問的SQL執(zhí)行計(jì)劃 當(dāng)我們執(zhí)行一條SQL的時(shí)候,可以直接對(duì)應(yīng)的結(jié)果,但是你并不曉得,它會(huì)經(jīng)歷多深遠(yuǎn)黑暗的隧道,通過連接器、查詢緩存、分析器、優(yōu)化器、執(zhí)行器重重篩選,才有可能展示到我們面前,有時(shí)候當(dāng)你等待N長(zhǎng)時(shí)間,但是展現(xiàn)的卻是 timeout,這個(gè)時(shí)候想砸電腦的心都有了,不過當(dāng)你看了今天的SQL執(zhí)行計(jì)劃后,你再也不用砸電腦了,看懂了這篇文章你就會(huì)知道這都不是事,讓我們一起來揭曉這里面的奧妙

在實(shí)際的應(yīng)用場(chǎng)景中,為了知道優(yōu)化SQL語句的執(zhí)行,需要查看SQL語句的具體執(zhí)行過程,以加快SQL語句的執(zhí)行效率。通常會(huì)使用explain+SQL語句來模擬優(yōu)化器執(zhí)行SQL查詢語句,從而知道m(xù)ysql是如何處理sql語句的。

官網(wǎng)地址: https://dev.mysql.com/doc/refman/5.5/en/explain-output.html

首先我們來下面的一條sql語句,其中會(huì)有 id、select_type、table等等這些列,這些就是我們執(zhí)行計(jì)劃中所包含的信息,我們要弄明白的就是這些列是用來干嘛的,以及每個(gè)列可能存在多少個(gè)值。

explain select * from emp;

來自靈魂的拷問—知道什么是SQL執(zhí)行計(jì)劃嗎?

二、執(zhí)行計(jì)劃中包含的信息

列(Column) 含義(Meaning)
id The SELECT identifier(每個(gè)select子句的標(biāo)識(shí)id
select_type The SELECT type(select語句的類型
table The table for the output row(當(dāng)前表名
partitions The matching partitions (顯示查詢將訪問的分區(qū),如果你的查詢是基于分區(qū)表
type The join type(當(dāng)前表內(nèi)訪問方式
possible_keys The possible indexes to choose(可能使用到的索引
key The index actually chosen(經(jīng)過優(yōu)化器評(píng)估最終使用的索引
key_len The length of the chosen key (使用到的索引長(zhǎng)度
ref The columns compared to the index(引用到的上一個(gè)表的列
rows Estimate of rows to be examined (要得到最終記錄索要掃描經(jīng)過的記錄數(shù)
filtered Percentage of rows filtered by table condition(存儲(chǔ)引擎返回的數(shù)據(jù)在server層過濾后,剩下滿足查詢的記錄數(shù)量的比例
extra Additional information (額外的信息說明
貼心的小農(nóng)已經(jīng)把sql復(fù)制出來了,只需要放到數(shù)據(jù)庫中執(zhí)行即可,方便簡(jiǎn)單快捷                                                        ——牧小農(nóng)


建表語句:

SET FOREIGN_KEY_CHECKS=0;DROP TABLE IF EXISTS `dept`;CREATE TABLE `dept` ( `DEPTNO` int NOT NULL, `DNAME` varchar(14) DEFAULT NULL, `LOC` varchar(13) DEFAULT NULL, PRIMARY KEY (`DEPTNO`)) ENGINE=InnoDB DEFAULT CHARSET=utf8;
INSERT INTO `dept` VALUES ('10', 'ACCOUNTING', 'NEW YORK');INSERT INTO `dept` VALUES ('20', 'RESEARCH', 'DALLAS');INSERT INTO `dept` VALUES ('30', 'SALES', 'CHICAGO');INSERT INTO `dept` VALUES ('40', 'OPERATIONS', 'BOSTON');
DROP TABLE IF EXISTS `emp`;CREATE TABLE `emp` ( `EMPNO` int NOT NULL, `ENAME` varchar(10) DEFAULT NULL, `JOB` varchar(9) DEFAULT NULL, `MGR` int DEFAULT NULL, `HIREDATE` date DEFAULT NULL, `SAL` double(7,2) DEFAULT NULL, `COMM` double(7,2) DEFAULT NULL, `DEPTNO` int DEFAULT NULL, PRIMARY KEY (`EMPNO`), KEY `idx_job` (`JOB`), KEY `jdx_mgr` (`MGR`), KEY `jdx_3` (`DEPTNO`), KEY `idx_3` (`DEPTNO`)) ENGINE=InnoDB DEFAULT CHARSET=utf8;
INSERT INTO `emp` VALUES ('7369', 'SMITH', 'CLERK', '7902', '1980-12-17', '800.00', null, '20');INSERT INTO `emp` VALUES ('7499', 'ALLEN', 'SALESMAN', '7698', '1981-02-20', '1600.00', '300.00', '30');INSERT INTO `emp` VALUES ('7521', 'WARD', 'SALESMAN', '7698', '1981-02-22', '1250.00', '500.00', '30');INSERT INTO `emp` VALUES ('7566', 'JONES', 'MANAGER', '7839', '1981-02-02', '2975.00', null, '20');INSERT INTO `emp` VALUES ('7654', 'MARTIN', 'SALESMAN', '7698', '1981-09-28', '1250.00', '1400.00', '30');INSERT INTO `emp` VALUES ('7698', 'BLAKE', 'MANAGER', '7839', '1981-01-05', '2850.00', null, '30');INSERT INTO `emp` VALUES ('7782', 'CLARK', 'MANAGER', '7839', '1981-09-06', '2450.00', null, '10');INSERT INTO `emp` VALUES ('7839', 'KING', 'PRESIDENT', null, '1981-11-17', '5000.00', null, '10');INSERT INTO `emp` VALUES ('7844', 'TURNER', 'SALESMAN', '7698', '1981-09-08', '1500.00', '0.00', '30');INSERT INTO `emp` VALUES ('7900', 'JAMES', 'CLERK', '7698', '1981-12-03', '950.00', null, '30');INSERT INTO `emp` VALUES ('7902', 'FORD', 'ANALYST', '7566', '1981-12-03', '3000.00', null, '20');INSERT INTO `emp` VALUES ('7934', 'MILLER', 'CLERK', '7782', '1982-01-23', '1300.00', null, '10');
DROP TABLE IF EXISTS `emp2`;CREATE TABLE `emp2` ( `id` int NOT NULL AUTO_INCREMENT, `empno` int DEFAULT NULL, PRIMARY KEY (`id`)) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=utf8;INSERT INTO `emp2` VALUES ('1', '111');INSERT INTO `emp2` VALUES ('2', '222');
DROP TABLE IF EXISTS `salgrade`;CREATE TABLE `salgrade` ( `GRADE` int NOT NULL, `LOSAL` double DEFAULT NULL, `HISAL` double DEFAULT NULL, PRIMARY KEY (`GRADE`)) ENGINE=InnoDB DEFAULT CHARSET=utf8;
INSERT INTO `salgrade` VALUES ('1', '700', '1200');INSERT INTO `salgrade` VALUES ('2', '1201', '1400');INSERT INTO `salgrade` VALUES ('3', '1401', '2000');INSERT INTO `salgrade` VALUES ('4', '2001', '3000');INSERT INTO `salgrade` VALUES ('5', '3001', '9999');
DROP TABLE IF EXISTS `t_job`;CREATE TABLE `t_job` ( `id` int NOT NULL AUTO_INCREMENT, `job` varchar(9) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL, PRIMARY KEY (`id`), KEY `j` (`job`)) ENGINE=InnoDB DEFAULT CHARSET=utf8;


2.1 id

select查詢的序列號(hào),包含一組數(shù)字,表示查詢中執(zhí)行select子句或者操作表的順序

id號(hào)分為三種情況:

1、如果id相同,那么執(zhí)行順序從上到下

-- 左關(guān)聯(lián)explain select* from emp e left join dept d on e.deptno = d.deptno;-- 右關(guān)聯(lián)eexplain select* from emp e right join dept d on e.deptno = d.deptno;


通過left join 和 right join 驗(yàn)證;id一樣(注意執(zhí)行計(jì)劃的table列),left join 先掃描e表,再掃描d表;right join 先掃描d表,再掃描e表來自靈魂的拷問—知道什么是SQL執(zhí)行計(jì)劃嗎?

2、如果id不同,如果是子查詢,id的序號(hào)會(huì)遞增,id值越大優(yōu)先級(jí)越高,越先被執(zhí)行

explain select * from emp e where e.deptno = (select d.deptno from dept d where d.dname = 'SALES');

在下面的表中回先查詢 id 為 2的數(shù)據(jù) 也就是我們的 d表(注意:我們可以看到d表中select_type為 SUBQUERY 也就是子查詢的 意思),然后根據(jù)d表中的deptno去查詢 e表中的數(shù)據(jù)

來自靈魂的拷問—知道什么是SQL執(zhí)行計(jì)劃嗎?

3、id相同和不同的,同時(shí)存在:相同的可以認(rèn)為是一組,從上往下順序執(zhí)行,在所有組中,id值越大,優(yōu)先級(jí)越高,越先執(zhí)行

 explain select * from emp e join dept d on e.deptno = d.deptno join salgrade sg on e.sal between sg.losal and sg.hisal where e.deptno = (select d.deptno from dept d where d.dname = 'SALES');

在這里先從id為2的執(zhí)行,如果id是一樣的,就按照順序執(zhí)行來自靈魂的拷問—知道什么是SQL執(zhí)行計(jì)劃嗎?

2.2 select_type

主要用來分辨查詢的類型,是普通查詢還是聯(lián)合查詢還是子查詢

select_type 值 含義(Meaning)
SIMPLE 簡(jiǎn)單的查詢不包含 UNION 和 subqueries
PRIMARY 查詢中若包含任何復(fù)雜的子查詢,最外層查詢則被標(biāo)記為Primary
UNION 若第二個(gè)select出現(xiàn)在union之后,則被標(biāo)記為union
DEPENDENT UNION 跟union類似,此處的depentent表示union或union all聯(lián)合而成的結(jié)果會(huì)受外部表影響
UNION RESULT 從union表獲取結(jié)果的select
SUBQUERY 在select或者where列表中包含子查詢
DEPENDENT SUBQUERY subquery的子查詢要受到外部表查詢的影響
DERIVED from子句中出現(xiàn)的子查詢,也叫做派生類
UNCACHEABLE SUBQUERY 表示使用子查詢的結(jié)果不能被緩存
UNCACHEABLE UNION 表示union的查詢結(jié)果不能被緩存

--simple:簡(jiǎn)單的查詢,不包含子查詢和unionexplain select* from emp;


來自靈魂的拷問—知道什么是SQL執(zhí)行計(jì)劃嗎?

--primary:查詢中若包含任何復(fù)雜的子查詢,最外層查詢則被標(biāo)記為Primaryexplain select * from emp e where e.deptno = (select d.deptno from dept d where d.dname = 'SALES');

來自靈魂的拷問—知道什么是SQL執(zhí)行計(jì)劃嗎?

--union:若第二個(gè)select出現(xiàn)在union之后,則被標(biāo)記為unionexplain select * from emp where deptno = 10 union select * from emp where sal >2000;

來自靈魂的拷問—知道什么是SQL執(zhí)行計(jì)劃嗎?

--dependent union:跟union類似,此處的depentent表示union或union all聯(lián)合而成的結(jié)果會(huì)受外部表影響explain select * from emp e where e.empno in ( select empno from emp where deptno = 10 union select empno from emp where sal >2000);

來自靈魂的拷問—知道什么是SQL執(zhí)行計(jì)劃嗎?

--union result:從union表獲取結(jié)果的selectexplain select * from emp where deptno = 10 union select * from emp where sal >2000;

來自靈魂的拷問—知道什么是SQL執(zhí)行計(jì)劃嗎?

--subquery:在select或者where列表中包含子查詢explain select* from emp where sal > (select avg(sal) from emp) ;

來自靈魂的拷問—知道什么是SQL執(zhí)行計(jì)劃嗎?

--dependent subquery:subquery的子查詢要受到外部表查詢的影響explain select * from emp e where e.deptno = (select distinct deptno from dept where deptno = e.deptno);

來自靈魂的拷問—知道什么是SQL執(zhí)行計(jì)劃嗎?

--DERIVED: from子句中出現(xiàn)的子查詢,也叫做派生類,explain select * from (select ename staname,mgr from emp where ename = 'W' union select ename,mgr from emp where ename = 'E') a;

來自靈魂的拷問—知道什么是SQL執(zhí)行計(jì)劃嗎?

-- UNCACHEABLE SUBQUERY:表示使用子查詢的結(jié)果不能被緩存explain select * from emp where empno = (select empno from emp where deptno=@@sort_buffer_size);

來自靈魂的拷問—知道什么是SQL執(zhí)行計(jì)劃嗎?

--uncacheable union:表示union的查詢結(jié)果不能被緩存explain select * from emp where exists (select 1 from dept where emp.deptno = dept.deptno union select 1 from dept where deptno = 10);

來自靈魂的拷問—知道什么是SQL執(zhí)行計(jì)劃嗎?

2.3 table

對(duì)應(yīng)行正在訪問哪一個(gè)表,表名或者別名,可能是臨時(shí)表或者union合并結(jié)果集 1、如果是具體的表名,則表明從實(shí)際的物理表中獲取數(shù)據(jù),也可以是表的別名explainselect*fromempwheresal>(selectavg(sal)fromemp);

來自靈魂的拷問—知道什么是SQL執(zhí)行計(jì)劃嗎?

2、表名是derivedN的形式,表示使用了id為N的查詢產(chǎn)生的衍生表

explain select * from (select ename staname,mgr from emp where ename = 'WARD' union select ename staname,mgr from emp where ename = 'SMITH') a;

derived2 :表明我們需要從衍生表2中取數(shù)據(jù)

來自靈魂的拷問—知道什么是SQL執(zhí)行計(jì)劃嗎?

3、當(dāng)有union result的時(shí)候,表名是union n1,n2等的形式,n1,n2表示參與union的id

explain select * from emp where deptno = 10 union select * from emp where sal >2000;


來自靈魂的拷問—知道什么是SQL執(zhí)行計(jì)劃嗎?

2.4 type

type顯示的是訪問類型,訪問類型表示我是以何種方式去訪問我們的數(shù)據(jù),最容易想的是全表掃描,直接暴力的遍歷一張表去尋找需要的數(shù)據(jù),效率非常低下,訪問的類型有很多,效率從最好到最壞依次是:

system > const > eqref > ref > fulltext > refornull > indexmerge > uniquesubquery > indexsubquery > range > index > ALL

一般情況下,得保證查詢至少達(dá)到range級(jí)別,最好能達(dá)到ref

--all:全表掃描,一般情況下出現(xiàn)這樣的sql語句而且數(shù)據(jù)量比較大的話那么就需要進(jìn)行優(yōu)化。explain select * from emp;

來自靈魂的拷問—知道什么是SQL執(zhí)行計(jì)劃嗎?

--index:全索引掃描這個(gè)比all的效率要好,主要有兩種情況,一種是當(dāng)前的查詢時(shí)覆蓋索引,即我們需要的數(shù)據(jù)在索引中就可以索取,或者是使用了索引進(jìn)行排序,這樣就避免數(shù)據(jù)的重排序explain select empno from emp;

來自靈魂的拷問—知道什么是SQL執(zhí)行計(jì)劃嗎?

--range:表示利用索引查詢的時(shí)候限制了范圍,在指定范圍內(nèi)進(jìn)行查詢,這樣避免了index的全索引掃描,適用的操作符:=, <>, >, >=, <, <=, IS NULL, BETWEEN, LIKE, or IN() explain select * from emp where empno between 7000 and 7500;

來自靈魂的拷問—知道什么是SQL執(zhí)行計(jì)劃嗎?

--index_subquery:利用索引來關(guān)聯(lián)子查詢,不再掃描全表explain select * from emp where emp.job in (select job from t_job);
--unique_subquery:該連接類型類似與index_subquery,使用的是唯一索引 explain select * from emp e where e.deptno in (select distinct deptno from dept);
--ref_or_null:對(duì)于某個(gè)字段即需要關(guān)聯(lián)條件,也需要null值的情況下,查詢優(yōu)化器會(huì)選擇這種訪問方式explain select * from emp e where e.mgr is null or e.mgr=7369;

來自靈魂的拷問—知道什么是SQL執(zhí)行計(jì)劃嗎?

--ref:使用了非唯一性索引進(jìn)行數(shù)據(jù)的查找create index idx_3 on emp(deptno);explain select * from emp e,dept d where e.deptno =d.deptno;

來自靈魂的拷問—知道什么是SQL執(zhí)行計(jì)劃嗎?

--eq_ref :使用唯一性索引進(jìn)行數(shù)據(jù)查找explain select * from emp,emp2 where emp.empno = emp2.empno;

來自靈魂的拷問—知道什么是SQL執(zhí)行計(jì)劃嗎?

--const:這個(gè)表至多有一個(gè)匹配行,explain select * from emp where empno = 7369;

來自靈魂的拷問—知道什么是SQL執(zhí)行計(jì)劃嗎?

--system:表只有一行記錄(等于系統(tǒng)表),這是const類型的特例,平時(shí)不會(huì)出現(xiàn)

2.5 possible_keys

顯示可能應(yīng)用在這張表中的索引,一個(gè)或多個(gè),查詢涉及到的字段上若存在索引,則該索引將被列出,但不一定被查詢實(shí)際使用

explain select * from emp,dept where emp.deptno = dept.deptno and emp.deptno = 10;

來自靈魂的拷問—知道什么是SQL執(zhí)行計(jì)劃嗎?

2.6 key

實(shí)際使用的索引,如果為null,則沒有使用索引,查詢中若使用了覆蓋索引,則該索引和查詢的select字段重疊。

explain select * from emp,dept where emp.deptno = dept.deptno and emp.deptno = 10;

來自靈魂的拷問—知道什么是SQL執(zhí)行計(jì)劃嗎?

2.7 key_len

表示索引中使用的字節(jié)數(shù),可以通過keylen計(jì)算查詢中使用的索引長(zhǎng)度,在不損失精度的情況下長(zhǎng)度越短越好。

1、一般地,keylen 等于索引列類型字節(jié)長(zhǎng)度,例如int類型為4 bytes,bigint為8 bytes;

2、如果是字符串類型,還需要同時(shí)考慮字符集因素,例如utf8字符集1個(gè)字符占3個(gè)字節(jié),gbk字符集1個(gè)字符占2個(gè)字節(jié)

3、若該列類型定義時(shí)允許NULL,其keylen還需要再加 1 bytes

4、若該列類型為變長(zhǎng)類型,例如 VARCHAR(TEXT\BLOB不允許整列創(chuàng)建索引,如果創(chuàng)建部分索引也被視為動(dòng)態(tài)列類型),其keylen還需要再加 2 bytes 字符集會(huì)影響索引長(zhǎng)度、數(shù)據(jù)的存儲(chǔ)空間,為列選擇合適的字符集;變長(zhǎng)字段需要額外的2個(gè)字節(jié),固定長(zhǎng)度字段不需要額外的字節(jié)。而null都需要1個(gè)字節(jié)的額外空間,所以以前有個(gè)說法:索引字段最好不要為NULL,因?yàn)镹ULL讓統(tǒng)計(jì)更加復(fù)雜,并且需要額外一個(gè)字節(jié)的存儲(chǔ)空間。

explain select * from emp,dept where emp.deptno = dept.deptno and emp.deptno = 10;

來自靈魂的拷問—知道什么是SQL執(zhí)行計(jì)劃嗎?

2.8 ref

顯示索引的哪一列被使用了,如果可能的話,是一個(gè)常數(shù)

explain select * from emp,dept where emp.deptno = dept.deptno and emp.deptno = 10;

來自靈魂的拷問—知道什么是SQL執(zhí)行計(jì)劃嗎?

2.9 rows

根據(jù)表的統(tǒng)計(jì)信息及索引使用情況,大致估算出找出所需記錄需要讀取的行數(shù),此參數(shù)很重要,直接反應(yīng)的sql找了多少數(shù)據(jù),在完成目的的情況下越少越好

explain select * from emp;

來自靈魂的拷問—知道什么是SQL執(zhí)行計(jì)劃嗎?

2.10 extra

包含額外的信息。

--using filesort:說明mysql無法利用索引進(jìn)行排序,只能利用排序算法進(jìn)行排序,會(huì)消耗額外的位置explain select * from emp order by sal;

來自靈魂的拷問—知道什么是SQL執(zhí)行計(jì)劃嗎?

--using temporary:建立臨時(shí)表來保存中間結(jié)果,查詢完成之后把臨時(shí)表刪除explain select ename,count(*) from emp where deptno = 10 group by ename;

來自靈魂的拷問—知道什么是SQL執(zhí)行計(jì)劃嗎?

--using index:這個(gè)表示當(dāng)前的查詢時(shí)覆蓋索引的,直接從索引中讀取數(shù)據(jù),而不用訪問數(shù)據(jù)表。如果同時(shí)出現(xiàn)using where 表名索引被用來執(zhí)行索引鍵值的查找,如果沒有,表面索引被用來讀取數(shù)據(jù),而不是真的查找explain select deptno,count(*) from emp group by deptno limit 10;

來自靈魂的拷問—知道什么是SQL執(zhí)行計(jì)劃嗎?

--using where:使用where進(jìn)行條件過濾explain select * from emp2 where empno = 1;

來自靈魂的拷問—知道什么是SQL執(zhí)行計(jì)劃嗎?

三 總結(jié)

到這里執(zhí)行計(jì)劃就講完了,sql的執(zhí)行計(jì)劃并不是很難,主要是記住每個(gè)列代表的意思和如何進(jìn)行優(yōu)化,這個(gè)是需要大量的訓(xùn)練和實(shí)操實(shí)現(xiàn)的, 有興趣的小伙伴可以自行去試試,還是很有趣的,本文只是簡(jiǎn)單介紹一下MySQL執(zhí)行計(jì)劃,想全面深入了解MySQL,可優(yōu)先閱讀MySQL官方手冊(cè),大家加油~

特別推薦一個(gè)分享架構(gòu)+算法的優(yōu)質(zhì)內(nèi)容,還沒關(guān)注的小伙伴,可以長(zhǎng)按關(guān)注一下:

來自靈魂的拷問—知道什么是SQL執(zhí)行計(jì)劃嗎?

來自靈魂的拷問—知道什么是SQL執(zhí)行計(jì)劃嗎?

來自靈魂的拷問—知道什么是SQL執(zhí)行計(jì)劃嗎?

長(zhǎng)按訂閱更多精彩▼

來自靈魂的拷問—知道什么是SQL執(zhí)行計(jì)劃嗎?

如有收獲,點(diǎn)個(gè)在看,誠摯感謝


免責(zé)聲明:本文內(nèi)容由21ic獲得授權(quán)后發(fā)布,版權(quán)歸原作者所有,本平臺(tái)僅提供信息存儲(chǔ)服務(wù)。文章僅代表作者個(gè)人觀點(diǎn),不代表本平臺(tái)立場(chǎng),如有問題,請(qǐng)聯(lián)系我們,謝謝!

本站聲明: 本文章由作者或相關(guān)機(jī)構(gòu)授權(quán)發(fā)布,目的在于傳遞更多信息,并不代表本站贊同其觀點(diǎn),本站亦不保證或承諾內(nèi)容真實(shí)性等。需要轉(zhuǎn)載請(qǐng)聯(lián)系該專欄作者,如若文章內(nèi)容侵犯您的權(quán)益,請(qǐng)及時(shí)聯(lián)系本站刪除。
關(guān)閉
關(guān)閉