优化案例5:视图目标列改写优化
优化案例5:视图目标列改写优化
- 1. 问题描述
- 2. 分析过程
- 2.1 目标SQL
- 2.2 解决思路
- 1)效率低的执行计划
- 2)视图过滤性
- 3)查看已有索引定义
- 2.3 视图改写
- 2.4 增添复合索引
- 3. 优化总结
DM技术交流QQ群:940124259
1. 问题描述
视图改写优化单独拿出一例分享,未做hint优化,简单地改写视图列和增加一个索引就能搞定。
这条SQL本身很简单,被广州同事使出三板斧(统计信息、索引、ET耗时、HINT、清理执行计划),招式使尽,却没去留意视图定义本身内容的特点,利用视图的谓词下推的策略,就能达到优化目的。
截图为同事部分一堆骚操作:
2. 分析过程
2.1 目标SQL
-- 原始SQL代码
SELECT * FROM (SELECT A., ROWNUM R FROM(SELECT COUNT(1) OVER () RECORDCOUNT, M. from DISPLAYCENTER.WL_DDBB_WEEK_V mwhere m.bbid='BB-DD-002' and bbrq='20221014'and hzb=45 and lzb=6 ) A where rownum <=1000)b where r>0; -- telphoning --4ms
-- 视图原始定义WL_DDBB_WEEK_V
CREATE OR REPLACE VIEW WL_DDBB_WEEK_V AS
SELECT t1.bbzd_id bbid, '' bbmc,
SUBSTR (t1.bbzd_date, 1, 4) || SUBSTR (t1.bbzd_date, 7, 2) || SUBSTR (t1.bbzd_date, 9, 2) AS bbrq,
t1.hzd_nm hzb, t1.lzd_nm lzb, dyzd_sj as VALUE
FROM (SELECT
T1.*
FROM RAW_SMES.Bb_Dwsj_Tb T1) t1 ;
2.2 解决思路
1)效率低的执行计划
/*
-- predicate condition
1 #NSET2: [6597, 1, 912]
2 #PRJT2: [6597, 1, 912]; exp_num(8), is_atom(FALSE)
3 #SLCT2: [6597, 1, 912]; B.R > var2
4 #PRJT2: [6597, 1, 912]; exp_num(8), is_atom(FALSE)
5 #RN: [6597, 1, 912]
6 #PRJT2: [6597, 1, 912]; exp_num(7), is_atom(FALSE)
7 #TOPN2: [6597, 1, 912]; top_num(exp11)
8 #AFUN: [6597, 1, 912]; afun_num(1); partition_num(0); order_num(0)
9 #PRJT2: [6597, 34, 912]; exp_num(6), is_atom(FALSE)
10 #SLCT2: [6597, 34, 912]; (exp_cast(T1.HZD_NM) = 45 AND exp_cast(T1.LZD_NM) = 6 AND exp11 || exp11 || exp11 = '20221014')
11 #BLKUP2: [6597, 2754812, 912]; IDX_BB_DWSJ(T1)
12 #SSEK2: [6597, 2754812, 912]; scan_type(ASC), IDX_BB_DWSJ(BB_DWSJ_TB as T1), scan_range[('BB-DD-002',min,min,min),('BB-DD-002',max,max,max))
*/
从执行计划步骤12 SSEK2和步骤10 SLCT2操作符的附加信息可以看出视图的过滤条件被下放。 但回表大严重(2754812行),由此可以推断这表很大,然而看着应用复合索引,只能命中一个字段定位,二次回表再过滤,不慢才怪。 所以影响此SQL的罪魁祸首是回表200+W的数据,造成大量的逻辑读和磁盘读。
2)视图过滤性
select count(*) from DISPLAYCENTER.WL_DDBB_WEEK_V ; -- 110 265 448 1亿1千万的数据行
select count(*) from DISPLAYCENTER.WL_DDBB_WEEK_V m where m.bbid='BB-DD-002' and m.bbrq='20221014'; -- 816 过滤性极强
select count(*) from DISPLAYCENTER.WL_DDBB_WEEK_V m where m.bbid='BB-DD-002' and hzb=45 and lzb=6 and bbrq='20221014'; -- 1
视图里面只有一个基表且数据量庞大,bbid和bbrq组合条件过滤性很强,对它们建个索引效果更好。
3)查看已有索引定义
/*
-- 表定义
CREATE TABLE "RAW_SMES"."BB_DWSJ_TB"
(
"QYZD_BH" VARCHAR2(40),
"DWZD_BH" VARCHAR2(30),
"BBZD_ID" VARCHAR2(20),
"BBZD_DATE" VARCHAR2(10),
"BBZD_YEAR" VARCHAR2(10),
"BBZD_MON" VARCHAR2(10),
"BBZD_DAY" VARCHAR2(10),
"BBZD_QUA" VARCHAR2(10),
"BBZD_TENDAY" VARCHAR2(10),
"BBZD_WEEK" VARCHAR2(10),
"HZD_ZB" NUMBER,
"LZD_ZB" NUMBER,
"H_BZBM" VARCHAR2(30),
"L_BZBM" VARCHAR2(30),
"DYZD_SJ" VARCHAR2(500),
"DYZD_DATA" NUMBER(20,6),
"XSSX" NUMBER,
"HZD_NM" VARCHAR2(50),
"LZD_NM" VARCHAR2(50),
"INSERT_ODS_TIME" TIMESTAMP(0),
"UPDATE_ODS_TIME" TIMESTAMP(0),
"M_ROW$$" VARCHAR2(128)) STORAGE(ON "RAW_SCGK", CLUSTERBTR) ;-- 索引定义
CREATE UNIQUE INDEX "UK_M_ROW" ON "RAW_SMES"."BB_DWSJ_TB"("M_ROW$$" ASC) STORAGE(ON "RAW_SCGK", CLUSTERBTR) ;
CREATE INDEX "IDX_BB_DWSJ" ON "RAW_SMES"."BB_DWSJ_TB"("BBZD_ID" ASC,"BBZD_DATE" ASC,"HZD_NM" ASC,"LZD_NM" ASC) STORAGE(ON "RAW_SCGK", CLUSTERBTR) ;
*/
看到索引定义("BBZD_ID" ASC,"BBZD_DATE" ASC,"HZD_NM" ASC,"LZD_NM" ASC) 时,知道他们离优化成功半步之遥,不懂BBZD_DATE字段被视图转换拼接, 已不再是原始字段,所以这个索引无法利用上第2个字段,则解释清楚1)所说的执行计划涉及的回表严重。
2.3 视图改写
原始视图的bbrq视图列定义SUBSTR (t1.bbzd_date, 1, 4) || SUBSTR (t1.bbzd_date, 7, 2) || SUBSTR (t1.bbzd_date, 9, 2) AS bbrq, 写得太复杂,无非就是从字符类型的bbzd_date截取出合法的日期格式数据,把一大趾函数转换简单化,变成stuff函数,减少复杂计算, 还能让后面建函数索引更简单方便。-- redefination view reduce function cost
CREATE OR REPLACE VIEW DISPLAYCENTER.WL_DDBB_WEEK_V
AS
SELECT
t1.bbzd_id bbid,
'' bbmc ,
stuff(t1.bbzd_date, 5, 2, '') AS bbrq, -- 改写位置
t1.hzd_nm hzb ,
t1.lzd_nm lzb ,
dyzd_sj as VALUE
FROM
(
SELECT T1.* FROM RAW_SMES.Bb_Dwsj_Tb T1
)
t1 ;
2.4 增添复合索引
create index idx_comb_bbid_hzb_lzb on “RAW_SMES”.“BB_DWSJ_TB”(BBZD_ID, STUFF(bbzd_date, 5, 2, ‘’), HZD_NM,LZD_NM ) ONLINE;
将就原来他们建的索引IDX_BB_DWSJ的逻辑,把第2个字段替换成stuff函数。再来一探执行计划的变化,不出意外的话,将会充分利用上索引前两个字段的过滤性。
/* 执行时间:4毫秒
1 #NSET2: [163, 1, 912]
2 #PRJT2: [163, 1, 912]; exp_num(8), is_atom(FALSE)
3 #SLCT2: [163, 1, 912]; B.R > var2
4 #PRJT2: [163, 1, 912]; exp_num(8), is_atom(FALSE)
5 #RN: [163, 1, 912]
6 #PRJT2: [163, 1, 912]; exp_num(7), is_atom(FALSE)
7 #TOPN2: [163, 1, 912]; top_num(exp11)
8 #AFUN: [163, 1, 912]; afun_num(1); partition_num(0); order_num(0)
9 #PRJT2: [163, 68469, 912]; exp_num(6), is_atom(FALSE)
10 #SLCT2: [163, 68469, 912]; (exp_cast(T1.HZD_NM) = 45 AND exp_cast(T1.LZD_NM) = 6)
11 #BLKUP2: [163, 68469, 912]; IDX_COMB_BBID_HZB_LZB(T1)
12 #SSEK2: [163, 68469, 912]; scan_type(ASC), IDX_COMB_BBID_HZB_LZB(BB_DWSJ_TB as T1), scan_range[('BB-DD-002','20221014',min,min),('BB-DD-002','20221014',max,max))
*/
执行计划BLKUP2 显示回表68469,索引统计信息未收集,收集一下就成。 总体来说,优化已经达到预期目标,4毫秒已经很nice。可能美中不足复合索引剩下两字段没用上,跑到SLCT2作回表过滤。 细心地会发现(exp_cast(T1.HZD_NM) = 45 AND exp_cast(T1.LZD_NM) = 6) 出现exp_cast数据库内部隐式转换,所以才漏掉。 喊他们把条件数字带上单引号【hzb='45' and lzb='6'】,避免类型转换,也就解决索引全列过滤。
3. 优化总结
懂得索引合理创建,不要乱建索引,复合索引的组合字段弄得太多不是好事,因为能利用上的索引键就一个或两个,完全没意义弄这么多索引键,潜在隐藏一个信息,索引体积太大,索引B+树庞大,可能引起大量的IO读写,影响索引扫描的效率。
一定要充分利用索引特性,够小(体积小,可以理解为表的瘦身版),够高效(过滤性强)。
明白视图的优化手段,无非包含视图上拉、视图合并等等优化思想。
相关文章:
![](https://img-blog.csdnimg.cn/67a37f32236f4842a38dbb886bbbddca.png)
优化案例5:视图目标列改写优化
优化案例5:视图目标列改写优化 1. 问题描述2. 分析过程2.1 目标SQL2.2 解决思路1)效率低的执行计划2)视图过滤性3)查看已有索引定义 2.3 视图改写2.4 增添复合索引 3. 优化总结 DM技术交流QQ群:940124259 1. 问题描述…...
![](https://img-blog.csdnimg.cn/a99d43ed2efe4489a1532d68b48b9fe9.png)
Origin绘制彩色光谱图
成果图 1、双击线条打开如下窗口 2、选择“图案”-》颜色-》按点-》映射-》Wavelength 3、选择颜色映射 4、单击填充-》选择加载调色板-》Rainbow-》确定 5、单击级别,设置成从370到780,右侧增量选择2(越小,颜色渐变越细腻&am…...
![](https://www.ngui.cc/images/no-images.jpg)
项目复盘:从实践中学习
引言 在我们的工作生涯中,每一个项目都是一次学习的机会。项目复盘是对已完成项目的全面评估,旨在理解我们做得好的地方,以及需要改进的地方。这篇文章将分享我们如何进行项目复盘,以及我们从中学到了什么。 项目背景 在我们开…...
![](https://img-blog.csdnimg.cn/2a3be193d72d48e4a7959feac652112d.png)
机器学习和数据挖掘02-Gaussian Naive Bayes
概念 贝叶斯定理: 贝叶斯定理是概率中的基本定理,描述了如何根据更多证据或信息更新假设的概率。在分类的上下文中,它用于计算给定特征集的类别的后验概率。 特征独立性假设: 高斯朴素贝叶斯中的“朴素”假设是,给定…...
![](https://www.ngui.cc/images/no-images.jpg)
【面试题精讲】Java Stream排序的实现方式
首发博客地址 系列文章地址 如何使用Java Stream进行排序 在Java中,使用Stream进行排序可以通过sorted()方法来实现。sorted()方法用于对Stream中的元素进行排序操作。具体实现如下: 对基本类型元素的排序: 使用sorted()方法对Stream进行排序…...
![](https://img-blog.csdnimg.cn/f800035c08e941adad754ab0f25ef9e2.png)
浅谈Spring
Spring是一个轻量级的控制反转(IoC)和面向切面(AOP)的容器(框架)。 一、什么是IOC? IoC Inversion of Control 翻译成中⽂是“控制反转”的意思,也就是说 Spring 是⼀个“控制反转”的容器。 1.1控制反转推导 这个控制反转怎…...
![](https://img-blog.csdnimg.cn/4a67fa7ba7ea4a11a7e331911e23cdaa.png)
Java 复习笔记 - 面向对象进阶篇
文章目录 一,Static(一)Static的概述(二)静态变量(三)静态方法(四)工具类(五)static的注意事项 二,继承(一)继…...
![](https://csdnimg.cn/release/blog_editor_html/release2.3.6/ckeditor/plugins/CsdnLink/icons/icon-default.png?t=N7T8)
微信小程序中识别html标签的方法
rich-text组件 在微信小程序中有一个组件rich-text可以识别文本节点或是元素节点 具体入下: //需要识别的数据放在data中,然后放在nodes属性中即可 <rich-text nodes"{{data}}"></rich-text>详情可以参考官方文档:https://developers.weixin.qq.com/mi…...
![](https://img-blog.csdnimg.cn/4255b5807583406183764678a40a1991.png)
02_常见网络层协议的头结构
1.ARP报文的报文结构 ARP首部的5个字段的含义: 硬件类型:值为1表示以太网MAC地址。 协议类型:表示要映射的协议地址类型,0x0800 表示映射为IP地址。 硬件地址长度:在以太网ARP的请求和应答中都是6,表示M…...
![](https://www.ngui.cc/images/no-images.jpg)
ChatGLM学习
GLM paper:https://arxiv.org/pdf/2103.10360.pdfchatglm 130B:https://arxiv.org/pdf/2210.02414.pdf 前置知识补充 双流自注意力 Two-stream self-attention mechanism(双流自注意机制)是一种用于自然语言处理任务的注意力机制…...
![](https://www.ngui.cc/images/no-images.jpg)
Flink之Watermark
1.乱序问题 流处理从事件产生,到流经source,再到operator,中间是有一个过程和时间的,虽然大部分情况下,流到operator的数据都是按照事件产生的时间顺序来的,但是也不排除由于网络、分布式等原因࿰…...
![](https://www.ngui.cc/images/no-images.jpg)
二轮平衡小车3:PID速度环
使用芯片:STM32 F103 C8T6 今日继续我的二路平衡小车开发之路,今日编写的是二轮平衡小车的PID速度环,我准备了纸飞机串口助手软件来辅助测试调节PID。 本文主要贴代码,之前的文章都有原理,代码中相应初始化驱动部分也…...
![](https://img-blog.csdnimg.cn/dc876b51373c4b3f8975d0dd03e8e8c1.png)
C语言之练习题
欢迎来到我的世界 希望这篇文章对你有所帮助,有不足的地方还请指正,大家一起学习交流 ! 目录 前言编程题第一题:珠玑妙算第二题:寻找奇数第三题:寻找峰值第四题:数对 总结 前言 这是暑假题目的收尾文章&am…...
![](https://img-blog.csdnimg.cn/img_convert/917631c2bf40b718817b9545cb690ff4.png)
没钱,没人,没经验?传统制造型企业如何用无代码实现转型
2023年,国家市场监督管理总局发布了三项重要标准,包括《工业互联网平台选型要求》、《工业互联网平台微服务参考框架》和《工业互联网平台开放应用编程接口功能要求》。这些标准的发布对于完善工业互联网平台标准体系,提升多样化工业互联网平…...
![](https://www.ngui.cc/images/no-images.jpg)
CentOS ARM 部署 kubernetes v1.24.6
1.背景 之前安装的kubernetes版本为v1.19.0 树莓派使用(CentOS7.9 armv71 Kubernetes1.19.0), 由于版本过低,一些HPA相关的功能支持不是特别好,因此需要将版本升级,本次会将版本升级为v1.24.6. 2. 如何upgrade 2.1. 优雅升级 kubeadm自带…...
![](https://img-blog.csdnimg.cn/img_convert/db8248d35ada46927475891bd65798af.jpeg)
LeetCode 725. Split Linked List in Parts【链表】中等
本文属于「征服LeetCode」系列文章之一,这一系列正式开始于2021/08/12。由于LeetCode上部分题目有锁,本系列将至少持续到刷完所有无锁题之日为止;由于LeetCode还在不断地创建新题,本系列的终止日期可能是永远。在这一系列刷题文章…...
![](https://img-blog.csdnimg.cn/de4fba3733ee48c5a7036d6adff6824f.png#pic_center)
云计算中的负载均衡技术,确保资源的平衡分配
文章目录 1. 硬件负载均衡器2. 软件负载均衡器3. DNS负载均衡4. 内容分发网络(CDN) 🎈个人主页:程序员 小侯 🎐CSDN新晋作者 🎉欢迎 👍点赞✍评论⭐收藏 ✨收录专栏:云计算 ✨文章内…...
![](https://www.ngui.cc/images/no-images.jpg)
探索 SOCKS5 代理在跨境电商中的网络安全应用
随着全球化的发展,跨境电商成为了商业界的一颗新星,为企业提供了无限的发展机遇。然而,随之而来的是网络安全的挑战,特别是在处理国际网络流量时。在这篇文章中,我们将探讨如何利用 SOCKS5 代理和代理 IP 技术来加强跨…...
![](https://img-blog.csdnimg.cn/6fcedceef1864b46ae931d84ed1f1781.png)
全网独家:编译CentOS6.10系统的openssl-1.1.1多版本并存的rpm安装包
CentOS6.10系统原生的openssl版本太老,1.0.1e,不能满足一些新版本应用软件的要求,但是它又被wget、mysql-libs、python-2.6.6、yum等一众系统包所依赖,不能再做升级。故需考虑在不影响系统原生openssl的情况下,安装较新…...
![](https://www.ngui.cc/images/no-images.jpg)
【go】异步任务解决方案Asynq实战
文章目录 一.Asynq介绍二.所需工具三.代码示例四.Reference 一.Asynq介绍 Asynq 是一个 Go 库,一个高效的分布式任务队列。 Asynq 工作原理: 客户端(生产者)将任务放入队列服务器(消费者)从队列中拉出任…...
![](https://www.ngui.cc/images/no-images.jpg)
掌握 Android 自动化测试框架 UiAutomator UiAutomator2
掌握 Android 自动化测试框架 UiAutomator & UiAutomator2 一、UiAutomator 简介二、UiAutomator2 的诞生三、UiAutomator2 的应用实践总结你是否曾经在进行 Android 应用开发时,对于如何进行全面、有效的自动化测试感到困惑?你是否想要更高效地进行 UI 测试,而不是一遍…...
![](https://www.ngui.cc/images/no-images.jpg)
c#抽象类(abstract)
概述: C#中的抽象类是一种特殊类型的类,它不能被实例化,只能被继承。抽象类用于提供一个共享的基类,其中定义了一些方法和属性的签名,但没有具体的实现。这些方法和属性可以在派生类中进行实现。 使用抽象类的主要目…...
![](https://img-blog.csdnimg.cn/670b00cb21ba42919cf77ce8423345ee.png)
语义分割实践思考记录(个人备忘录)
一、任务管理器、NVDIA的GPU利用率显示[1][2] 若需要在任务管理器中查看基于Pytorch框架的GPU利用率,那么,我们需要将监控面板监测内容调整为cuda。图一(左)即为英伟达命令行工具面板。 图一 英伟达GPU使用率监控 二、基于混淆矩阵…...
![](https://img-blog.csdnimg.cn/img_convert/d0aba61ea5ee9961fcc6411da01a9fad.jpeg)
Zebec Protocol 成非洲利比亚展会合作伙伴,并将向第三世界国家布局
在 9 月 6 日,The Digital Asset Summit ’23(利比亚大会)在尼日利亚首度阿布贾的 NAF 会议中心举办,该会议对 Web3 领域在非洲地区的发展进行了探索,旨在推动非洲地区区块链产业的进一步发展,据悉该会议室…...
![](https://www.ngui.cc/images/no-images.jpg)
随机流-RandomAccessFile
RandomAccessFile RandomAccessFile 基本操作案例 RandomAccessFile 基本操作 案例 import java.io.*;public class TestMain09 {public static void main(String[] args) throws Exception {insert("D:\\home\\product\\aa.txt",2,"ni");}public static…...
![](https://www.ngui.cc/images/no-images.jpg)
单例和静态类
C#中的单例(Singleton)和静态类(Static Class)是两种不同的设计模式,它们各自有不同的用途和特点。 单例模式是一种设计模式,它确保一个类只有一个实例,并提供全局访问点。通常,单例…...
![](https://www.ngui.cc/images/no-images.jpg)
PMP-项目风险管理的重要性
一、什么是项目风险管理 项目风险管理旨在识别和管理未被其他项目管理过程所管理的风险。如果不妥善管理,这些风险有可能导致项目偏离计划,无法达成既定的项目目标。因此,项目风险管理的有效性直接关乎项目成功与否。 每个项目都在两个层面…...
![](https://www.ngui.cc/images/no-images.jpg)
学习的心得
文章目录 第一节课心得**学会了敲写数学公式** 第一节课心得 老师讲得非常好,我们下载了xmind,如何制作思维导图 学会了敲写数学公式 ∫ 10 20 ( x 2 − 3 x 2 ) d x \displaystyle\int_{10}^{20}(x^2-3x2)dx ∫1020(x2−3x2)dx...
![](https://img-blog.csdnimg.cn/img_convert/585222c9021f29a20683dea0adcab664.png)
Python网络爬虫中这七个li标签下面的属性值,不是固定的,怎样才能拿到他们的值呢?...
点击上方“Python爬虫与数据挖掘”,进行关注 回复“书籍”即可获赠Python从入门到进阶共10本电子书 今 日 鸡 汤 愚以为宫中之事,事无大小,悉以咨之,然后施行,必能裨补阙漏,有所广益。 大家好,我…...
![](https://img-blog.csdnimg.cn/723ab53d101d43edb74410e1593c592b.png)
白鲸开源 DataOps 平台加速数据分析和大模型构建
作者 | 李晨 编辑 | Debra Chen 数据准备对于推动有效的自助式分析和数据科学实践至关重要。如今,企业大都知道基于数据的决策是成功数字化转型的关键,但要做出有效的决策,只有可信的数据才能提供帮助,随着数据量和数据源的多样…...
![](/images/no-images.jpg)
云主机如何做两个网站/百度seo排名教程
网页爬虫知识点总结 1.什么是爬虫? 爬虫就是:模拟浏览器发送请求,获取响应2.爬虫的分类,爬虫的流程 聚焦爬虫:针对特定的网站的爬虫 准备url地址 -->发送请求 获取响应–> 提取数据–> 保存获取响应–>…...
![](https://img-blog.csdnimg.cn/20201101204213119.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80MzkzMTYyNQ==,size_16,color_FFFFFF,t_70)
北京网站建设公司网络营销外包网络建站报价/企业seo优化
java 动态规划(三角形最短路径和) ************************** 三角形最短路径和 问题描述 给定一个三角形,找出自顶向下的最小路径和 每一步只能移动到下一行中相邻的结点上(相邻节点:索引相同、索引1)示例: [[2],[…...
![](/images/no-images.jpg)
中央政府网站的建设的意见/抖音广告推广
1 判断数据库是否存在Sql代码 if exists (select * from sys.databases where name ’数据库名’) drop database [数据库名] if exists (select * from sys.databases where name ’数据库名’) drop database [数据库名]2 判断表是否存在Sql代码 if exists (select * …...
![](/images/no-images.jpg)
做第一个php网站/热狗seo顾问
周次 学习时间 新编写代码行数 博客量(篇) 学到知识点 本周 5 80(HTML的不知道算不算) 1 JAVA基础,网络基础的静态路由配置, XX XXX XXXX XXXX 转载于:https://www…...
![](https://img-blog.csdnimg.cn/0c294c8b5e02458f928c500a6b134ac9.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5ZGc5ZGc6Im-5Lym,size_15,color_FFFFFF,t_70,g_se,x_16)
网站备案作用/百度极速版下载
这题目的问题是 最后要加加 ,supplier.SName 虽然sid应该已经能分出行了 应该已经是不同的了 但是以前我写join的时候 都是要把所有的 除了count的列都group 这题是要写 distinct...
![](/images/no-images.jpg)
青岛移动公司网站/工具站seo
早晨起床时间:7:00 晚上休息时间:22:55 全天处理事件:1.面试。2.出去游玩。 处事经验总结:暂无。 人生感悟:暂无。 其它:暂无。...