范文健康探索娱乐情感热点
投稿投诉
热点动态
科技财经
情感日志
励志美文
娱乐时尚
游戏搞笑
探索旅游
历史星座
健康养生
美丽育儿
范文作文
教案论文
国学影视

千万级数据,如何做性能优化?分库分表Oracle分区表?

  大家好,我是哪吒,最近项目有一个新的需求, 按月建表,按天分区  。
  不都是分库分表吗?怎么又来个分区?
  让我们一起,一探究竟,深入理解一下Oracle分区表技术,实现快速入门,丰富个人简历,提高面试level,给自己增加一点谈资,秒变面试小达人,BAT不是梦。
  三分钟你将学会: Oracle是如何存储数据的? Oracle分区是什么? 何时分区? 分区表的分类都有哪些? Oracle分区技术实战演练 一、Oracle是如何存储数据的?1、逻辑存储与物理存储
  在国企或者一线大厂,一般都会选择使用Oracle数据库,程序通过mybatis等持久层框架访问Oracle数据库,指定表空间,表空间内包含若干张表,表中存有行数据,行数据以行片段的形式存储在数据库块中,① 当插入的行太大,无法装入单个块时;② 或因为更新的缘故,导致现有行超出了当前空间时 -> 就会发生整个行不存储在一个位置的情况。
  Oracle在逻辑上将数据存储在表空间中,在物理上将数据存储在数据文件中。
  表空间包括若干个数据文件,这些表空间使用与运行Oracle软件的操作系统一致的物理结构。数据库的数据存储在构成数据库表空间的数据文件中。
  临时文件是一个临时表空间的文件;它是通过TEMPFILE选项创建的。临时表空间不包含表,通常用于排序。
  2、进一步分析它们之间的关系数据库包含若干个表空间(逻辑存储单元); 每一个表空间包含很多的Oracle 逻辑数据块,逻辑数据块的大小一般在2 KB 至32 KB,默认8 KB; Oracle 数据块是逻辑I/O的最小单位; 特定数目的相邻逻辑块构成了"区"; 特定逻辑结构分配的一组区构成了一个段;
  3、Oracle逻辑数据块
  数据库块包含块头、行数据、可用空间。 (1)块头
  块头包含段类型(如表或索引)、数据块地址、表目录、行目录和事务处理插槽。
  每个插槽的大小为24 字节,修改块中的行时会使用这些插槽。 (2)行数据
  块中行的实际数据。 (3)可用空间
  可用空间位于块的中部,允许头和行数据空间在必要时进行增长。当插入新行或用更大的值更新现有行的列时,行数据会占用可用空间。 (4)致块头增长的原因有:行目录需要更多的行条目; 需要的事务处理插槽数多于最初配置的数目;
  块中的可用空间最初是相邻的。但是,删除和更新操作可能会使块中的可用空间变成碎片,需要时Oracle 服务器会接合块中的空闲空间。 二、Oracle分区表技术
  分区是指表和索引可以被分成若干个部分,它们拥有相同的逻辑属性和数据结构。所有分区的字段和索引都是一样的。
  分区表是将表数据分为若干个可以被单独管理的片,每个片就是一个分区,分一个分区都可以拥有自己的物理属性,比如表空间、事务槽、存储参数、最小区段数等,通过建分区语句指定,提升可用性和存储效率。
  每个分区可以被单独管理,降低管理成本和备份成本,提高容错率,避免"一荣既荣,一损俱损"的问题。 1、分区表的优缺点
  (1)优点 可以通过指定分区提高查询性能; 提高容错率,避免"一荣既荣,一损俱损"的问题; 降低管理成本; 降低备份成本;
  (2)缺点
  普通表和分区表不能直接转换,可以通过数据迁移,再重命名的方式实现,需要重建约束、索引,在创建表时可以添加关键字"parallel compress"并行执行,提高效率,下面会通过SQL实例介绍。 2、何时分区?
  单表的数据量如果过大,会影响SQL的读写性能,我们可以通过分库分表的方式解决表性能的问题,Oracle的分区表是将一张大表在物理上分成几个较小的表,从逻辑上看仍然是一张完整的表。这样,每次DML操作只考虑其中一张分区表即可。
  那么,临界点是多少呢? 数量量超过500万且空间占用超过2GB的时候 必须分区  ; 数量量高于100万,低于500万时建议分区;
  注意:单个分区的数据可以超过500万,但存储空间不建议超过2GB。 三、分区相关的数据字典
  根据数据字典表的前缀不同,可查询的内容及权限有所差异: DBA_开头:需要DBA权限,查询全库内容; ALL_开头:查询当前用户权限下的内容; USER_开头:查询当前用户下的内容;
  以下是分区表的一些相关字典表,前缀是"DBA "、"ALL "、"USER_"; 分区表信息字典表:*_PART_TABLES; 分区信息字典表:*_TAB_PARTITIONS; 子分区信息字典表:*_TAB_SUBPARTITIONS; 分区表的分区字段信息字典表:*_PART_KEY_COLUMNS; 四、分区表的分类
  1、范围分区
  将数据基于范围映射到每一个分区,这个范围是由创建分区表时指定的分区键决定。
  一般选取id或者时间作为范围分区的分区键。 (1)按月建表,按天分区create table WORKER_202301 (   id        VARCHAR2(100) not null,   name      VARCHAR2(200),   technology      VARCHAR2(100),   save_date DATE ) partition by range (SAVE_DATE) (     partition WORKER20230129 values less than (TO_DATE("2023-01-30 00:00:00", "SYYYY-MM-DD HH24:MI:SS", "NLS_CALENDAR=GREGORIAN"))     tablespace MYSPACE     pctfree 10     initrans 1     maxtrans 255     storage     (       initial 80K       minextents 1       maxextents unlimited     ),   partition WORKER20230130 values less than (TO_DATE("2023-01-31 00:00:00", "SYYYY-MM-DD HH24:MI:SS", "NLS_CALENDAR=GREGORIAN"))     tablespace MYSPACE     pctfree 10     initrans 1     maxtrans 255     storage     (       initial 80K       minextents 1       maxextents unlimited     ) ); create index IDX_WORKER_ID202301 on WORKER_202301 (ID)   local; create index IDX_WORKER_ID_NAME202301 on WORKER_202301 (ID, NAME)   local;(2)建表语句分析NLS_CALENDAR=GREGORIAN:用于指定Oracle所使用的日历体系,其取值为Arabic Hijrah、English Hijrah、Gregorian、Japanese Imperial、Persian、ROC Official、Thai Buddha。 tablespace:指定表空间; pctfree:块保留10%的空间留给更新该块数据使用 initrans:初始化事务槽的个数; maxtrans:最大事务槽的个数; storage:存储参数 initial:区段(extent)一次扩展64k minextents:最小区段数 maxextents unlimited:最大区段无限制 每个块都有一个块首部。这个块首部中有一个事务表。事务表中会建立一些条目来描述哪些事务将块上的哪些行/元素锁定。这个事务表的初始大小由对象的INITRANS 设置指定。对于表,这个值默认为2(索引的INITRANS 也默认为2)。事务表会根据需要动态扩展,最大达到MAXTRANS 个条目(假设块上有足够的自由空间)。所分配的每个事务条目需要占用块首部中的23 24 字节的存储空间。注意,对于Oracle 10g,MAXTRANS 则会忽略,所有段的MAXTRANS 都是255。
  由于oracle块里有一个PCT_free的概念,即oracle会预留块大小的10%作为缓冲,当修改oracle的事务增加时,事务槽向下增长,当更新oracle块的数据时,数据向上增长,PCT_free的空间被压缩。
  local索引是针对单个分区表的索引;
  在对分区表进行维护操作时需检查索引是否失效,索引失效除了会导致查询慢,还会导致数据写入失败,在ALTER TBALE语法中也可以添加关键字"UPDATE INDEXES"避免维护表时索引失效。 (3)插入三条数据insert into worker_202301 (id,name,technology,save_date) values ("1","哪吒","java",to_date("2023/1/29 22:45:19","yyyy-MM-dd hh24:mi:ss")); insert into worker_202301 (id,name,technology,save_date) values ("2","云韵","java",to_date("2023/1/29 22:46:19","yyyy-MM-dd hh24:mi:ss")); insert into worker_202301 (id,name,technology,save_date) values ("3","美杜莎","Python",to_date("2023/1/30 00:45:19","yyyy-MM-dd hh24:mi:ss"));
  (4)查询指定分区select * from worker_202301  partition (WORKER20230129);
  跨分区查询时,查询每个分区的数据后使用UNION ALL关键字做集合查询,提高查询效率。
  (5)添加分区ALTER TABLE worker_202301  ADD PARTITION WORKER20230131  VALUES LESS THAN  (TO_DATE(" 2023-02-01 00:00:00",  "SYYYY-MM-DD HH24:MI:SS",  "NLS_CALENDAR=GREGORIAN"));(6)删除分区ALTER TABLE worker_202301  DROP PARTITION WORKER20230131;2、列表分区(1)列表分区适用于一个字段只有固定的几个值,比如类型、月份、课程等。create table WORKER_202302 (   id        VARCHAR2(100) not null,   name      VARCHAR2(200),   technology      VARCHAR2(100),   save_date DATE ) partition by list (technology) (     partition technology_java values ("java"),     partition technology_python values ("python"),     partition technology_c values ("c") );  create index IDX_WORKER_ID202301 on WORKER_202301 (ID)   local; create index IDX_WORKER_ID_NAME202301 on WORKER_202301 (ID, NAME)   local;(2)插入三条数据insert into worker_202302 (id,name,technology,save_date) values ("1","哪吒","java",to_date("2023/2/1 22:45:19","yyyy-MM-dd hh24:mi:ss")); insert into worker_202302 (id,name,technology,save_date) values ("2","云韵","java",to_date("2023/2/1 22:46:19","yyyy-MM-dd hh24:mi:ss")); insert into worker_202302 (id,name,technology,save_date) values ("3","美杜莎","python",to_date("2023/2/2 00:45:19","yyyy-MM-dd hh24:mi:ss"));(3)查询列表分区数据
  (4)如果一个分区的数据量不大,可以合并分区create table WORKER_202303 (   id        VARCHAR2(100) not null,   name      VARCHAR2(200),   technology      VARCHAR2(100),   save_date DATE ) partition by list (technology) (     partition technology_java values ("java","python"),     partition technology_c values ("c","c++") );3、哈希分区
  范围分区和列表分区都是使用某一个字段进行分区,此字段的分区度大才行,但也会产生诸多问题,比如上述的按技术列表分区,现阶段,Java开发人员明显高于C,此时就会导致分区不均匀的问题。
  此时,hash分区闪亮登场,hash分区的好处是让分区更均匀一些。 (1)上面的诸多参数都可以省略。create table WORKER_202304 (   id        VARCHAR2(100) not null,   name      VARCHAR2(200),   technology      VARCHAR2(100),   save_date DATE ) partition by hash (id) ( 	partition worker_id_1, 	partition worker_id_2, 	partition worker_id_3, 	partition worker_id_4, );
  此时,插入200条数据,id从1到200,验证一下是否均匀。数据条数分别是51、55、61、33。
  (2)何时使用hash分区?分区键的值最好是连续的; 分区数量最好是2的n次方,对hash运算更加友好; (3)添加hash分区:ALTER TABLE worker_202304  ADD PARTITION worker_id_5;
  刚创建好分区,worker_id_5就有数据了,why?匪夷所思。
  添加分区时,所有数据会重新计算hash值,重新分配到不同的分区表中。 (4)不可以删除hash分区
  4、范围列表组合分区(1)建表语句create table WORKER_202305 (   id        VARCHAR2(100) not null,   name      VARCHAR2(200),   technology      VARCHAR2(100),   save_date DATE ) partition by range (SAVE_DATE) SUBPARTITION BY LIST (technology)  (   partition WORKER20230529 values less than (TO_DATE(" 2023-05-30 00:00:00", "SYYYY-MM-DD HH24:MI:SS", "NLS_CALENDAR=GREGORIAN"))   (   	 SUBPARTITION technology_java_29 values("java"),      SUBPARTITION technology_python_29 values("python"),      SUBPARTITION technology_c_29 values("c")   ),   partition WORKER20230530 values less than (TO_DATE(" 2023-05-31 00:00:00", "SYYYY-MM-DD HH24:MI:SS", "NLS_CALENDAR=GREGORIAN"))   (   	 SUBPARTITION technology_java_30 values("java"),      SUBPARTITION technology_python_30 values("python"),      SUBPARTITION technology_c_30 values("c")   ) );(2)插入8条数据insert into worker_202305 (id,name,technology,save_date) values ("101","哪吒","java",to_date("2023/5/29 22:45:19","yyyy-MM-dd hh24:mi:ss")); insert into worker_202305 (id,name,technology,save_date) values ("102","云韵","java",to_date("2023/5/29 22:46:19","yyyy-MM-dd hh24:mi:ss")); insert into worker_202305 (id,name,technology,save_date) values ("103","美杜莎","java",to_date("2023/5/29 00:45:19","yyyy-MM-dd hh24:mi:ss")); insert into worker_202305 (id,name,technology,save_date) values ("104","哪吒","java",to_date("2023/5/29 22:45:19","yyyy-MM-dd hh24:mi:ss")); insert into worker_202305 (id,name,technology,save_date) values ("105","云韵1","python",to_date("2023/5/30 22:46:19","yyyy-MM-dd hh24:mi:ss")); insert into worker_202305 (id,name,technology,save_date) values ("106","美杜莎1","python",to_date("2023/5/30 00:45:19","yyyy-MM-dd hh24:mi:ss")); insert into worker_202305 (id,name,technology,save_date) values ("107","哪吒1","python",to_date("2023/5/30 22:45:19","yyyy-MM-dd hh24:mi:ss")); insert into worker_202305 (id,name,technology,save_date) values ("108","云韵1","python",to_date("2023/5/30 22:46:19","yyyy-MM-dd hh24:mi:ss"));(3)查询分区数据select count(1) from worker_202305 PARTITION (WORKER20230529);//4条 ok select count(1) from worker_202305 PARTITION (WORKER20230530);//4条 ok select count(1) from worker_202305 SUBPARTITION (TECHNOLOGY_JAVA_29);//4条 ok select count(1) from worker_202305 SUBPARTITION (TECHNOLOGY_JAVA_30);//0条 ok(4)添加主分区ALTER TABLE worker_202305 ADD PARTITION WORKER20230531 values less than (TO_DATE(" 2023-06-1 00:00:00", "SYYYY-MM-DD HH24:MI:SS", "NLS_CALENDAR=GREGORIAN"))   (   	 SUBPARTITION technology_java_31 values("java"),      SUBPARTITION technology_python_31 values("python"),      SUBPARTITION technology_c_31 values("c")   )
  为WORKER20230529添加子分区technology_go_29: ALTER TABLE worker_202305  MODIFY PARTITION WORKER20230529  ADD SUBPARTITION technology_go_29 values("go"); (5)删除子分区ALTER TABLE worker_202305  DROP SUBPARTITION technology_go_29;5、范围哈希组合分区(1)建表语句create table WORKER_202306 (   id        VARCHAR2(100) not null,   name      VARCHAR2(200),   technology      VARCHAR2(100),   save_date DATE ) partition by range (SAVE_DATE) SUBPARTITION BY HASH (id)  (   partition WORKER20230628 values less than (TO_DATE(" 2023-06-29 00:00:00", "SYYYY-MM-DD HH24:MI:SS", "NLS_CALENDAR=GREGORIAN"))   (    SUBPARTITION worker_id_1,      SUBPARTITION worker_id_2,      SUBPARTITION worker_id_3,    SUBPARTITION worker_id_4   ),   partition WORKER20230629 values less than (TO_DATE(" 2023-06-30 00:00:00", "SYYYY-MM-DD HH24:MI:SS", "NLS_CALENDAR=GREGORIAN"))   (   SUBPARTITION worker_id_5,      SUBPARTITION worker_id_6,      SUBPARTITION worker_id_7,    SUBPARTITION worker_id_8   ) );(2)插入10条数据insert into worker_202306 (id,name,technology,save_date) values ("101","哪吒","java",to_date("2023/6/28 22:45:19","yyyy-MM-dd hh24:mi:ss")); insert into worker_202306 (id,name,technology,save_date) values ("102","云韵","java",to_date("2023/6/28 22:46:19","yyyy-MM-dd hh24:mi:ss")); insert into worker_202306 (id,name,technology,save_date) values ("103","美杜莎","java",to_date("2023/6/28 00:45:19","yyyy-MM-dd hh24:mi:ss")); insert into worker_202306 (id,name,technology,save_date) values ("104","哪吒","java",to_date("2023/6/28 22:45:19","yyyy-MM-dd hh24:mi:ss")); insert into worker_202306 (id,name,technology,save_date) values ("105","云韵1","python",to_date("2023/6/29 22:46:19","yyyy-MM-dd hh24:mi:ss")); insert into worker_202306 (id,name,technology,save_date) values ("106","美杜莎1","python",to_date("2023/6/29 00:45:19","yyyy-MM-dd hh24:mi:ss")); insert into worker_202306 (id,name,technology,save_date) values ("107","哪吒1","python",to_date("2023/6/29 22:45:19","yyyy-MM-dd hh24:mi:ss")); insert into worker_202306 (id,name,technology,save_date) values ("108","云韵1","python",to_date("2023/6/29 22:46:19","yyyy-MM-dd hh24:mi:ss")); insert into worker_202306 (id,name,technology,save_date) values ("109","云韵1","python",to_date("2023/6/29 22:46:19","yyyy-MM-dd hh24:mi:ss")); insert into worker_202306 (id,name,technology,save_date) values ("110","云韵1","python",to_date("2023/6/29 22:46:19","yyyy-MM-dd hh24:mi:ss"));(3)查询分区数据select count(1) from worker_202306 PARTITION (WORKER20230628); select count(1) from worker_202306 PARTITION (WORKER20230629); select count(1) from worker_202306 SUBPARTITION (worker_id_1); select count(1) from worker_202306 SUBPARTITION (worker_id_2); select count(1) from worker_202306 SUBPARTITION (worker_id_5); select count(1) from worker_202306 SUBPARTITION (worker_id_6);
  由于hash分区的缘故,数据分布不均匀。 6、列表哈希组合分区(1)建表语句create table WORKER_202307 (   id        VARCHAR2(100) not null,   name      VARCHAR2(200),   technology      VARCHAR2(100),   save_date DATE ) partition by list (technology) SUBPARTITION BY HASH (id)  (   partition technology_java values ("java")   (    SUBPARTITION worker_id_1,      SUBPARTITION worker_id_2,      SUBPARTITION worker_id_3,    SUBPARTITION worker_id_4     ),   partition technology_python values ("python")   (    SUBPARTITION worker_id_5,      SUBPARTITION worker_id_6,      SUBPARTITION worker_id_7,    SUBPARTITION worker_id_8     ) );(2)插入10条数据insert into worker_202307 (id,name,technology,save_date) values ("101","哪吒","java",to_date("2023/7/28 22:45:19","yyyy-MM-dd hh24:mi:ss")); insert into worker_202307 (id,name,technology,save_date) values ("102","云韵","java",to_date("2023/7/28 22:46:19","yyyy-MM-dd hh24:mi:ss")); insert into worker_202307 (id,name,technology,save_date) values ("103","美杜莎","java",to_date("2023/7/28 00:45:19","yyyy-MM-dd hh24:mi:ss")); insert into worker_202307 (id,name,technology,save_date) values ("104","哪吒","java",to_date("2023/7/28 22:45:19","yyyy-MM-dd hh24:mi:ss")); insert into worker_202307 (id,name,technology,save_date) values ("105","云韵1","python",to_date("2023/7/29 22:46:19","yyyy-MM-dd hh24:mi:ss")); insert into worker_202307 (id,name,technology,save_date) values ("106","美杜莎1","python",to_date("2023/7/29 00:45:19","yyyy-MM-dd hh24:mi:ss")); insert into worker_202307 (id,name,technology,save_date) values ("107","哪吒1","python",to_date("2023/7/29 22:45:19","yyyy-MM-dd hh24:mi:ss")); insert into worker_202307 (id,name,technology,save_date) values ("108","云韵1","python",to_date("2023/7/29 22:46:19","yyyy-MM-dd hh24:mi:ss")); insert into worker_202307 (id,name,technology,save_date) values ("109","云韵1","python",to_date("2023/7/29 22:46:19","yyyy-MM-dd hh24:mi:ss")); insert into worker_202307 (id,name,technology,save_date) values ("110","云韵1","python",to_date("2023/7/29 22:46:19","yyyy-MM-dd hh24:mi:ss"));(3)查询分区数据select count(1) from worker_202307 PARTITION (technology_java); select count(1) from worker_202307 PARTITION (technology_python); select count(1) from worker_202307 SUBPARTITION (worker_id_1); select count(1) from worker_202307 SUBPARTITION (worker_id_2); select count(1) from worker_202307 SUBPARTITION (worker_id_5); select count(1) from worker_202307 SUBPARTITION (worker_id_6);五、对已有表进行分区1、先创建一张表,再插入200条数据。create table WORKER_202308 (   id        number not null,   name      VARCHAR2(200),   technology      VARCHAR2(100),   save_date DATE )
  2、创建一张新表,建一个范围分区create table WORKER_202308_tab (   id        number not null,   name      VARCHAR2(200),   technology      VARCHAR2(100),   save_date DATE ) partition by range (id) (   partition WORKER1 values less than (201) );3、把原表数据插入到新表select * from WORKER_202308; select * from WORKER_202308_tab;  ALTER TABLE WORKER_202308_tab   EXCHANGE PARTITION WORKER1   WITH TABLE WORKER_202308   WITHOUT VALIDATION;
  成功转移。 4、删除原表、新表改名DROP TABLE WORKER_202308; RENAME WORKER_202308_tab TO WORKER_202308;5、将一个分区拆分成多个分区,分区界限元素必须是一个:字符串,日期时间或间隔文字。
  AT括号内不能是字段名称,改为数字即可。 ALTER TABLE WORKER_202308  SPLIT PARTITION WORKER1 AT (180)  INTO (PARTITION WORKER2,PARTITION WORKER3);
  注意:不能修改分区列的数据类型
  通过sql查询验证分区是否成功。 SELECT * FROM USER_TAB_PARTITIONS  WHERE TABLE_NAME="WORKER_202309";
  通过sql查询分区数据: select count(1) from WORKER_202309  PARTITION (WORKER1);//分区不存在 ok  select count(1) from WORKER_202309  PARTITION (WORKER2);//179条数据 ok  select count(1) from WORKER_202309  PARTITION (WORKER3);//21条数据 ok6、截断分区
  截断分区是指删除某个分区中的数据,并不会删除分区,也不会删除其它分区中的数据。 ALTER TABLE WORKER_202309  TRUNCATE PARTITION WORKER3;7、合并分区ALTER TABLE WORKER_202309  MERGE PARTITIONS WORKER2,WORKER3  INTO PARTITION WORKER3 ;
  六、小结
  使用Oracle这么久,第一次系统的了解Oracle的存储结构, Oracle -> 表空间 -> 段 -> 区 -> 逻辑数据块  。
  了解了Oracle分区表技术适用于哪些场景、何时分区、分区表的分类,并通过SQL实例进行了实战演练。

足坛5大肌肉猛男C罗体脂率7堪比健美选手,卡洛斯大腿粗如水桶足球和篮球无疑是世界上两个球迷基数最大的运动,而相比于篮球,不少人都认为足球运动员的身体更接近于普通人,毕竟能够打NBA的球星往往都是身高2米往上的肌肉猛男,而足球中1米71米8左正式签约!亚当斯加盟北控男篮,携手马布里冲击季后赛北京时间4月13日,昨晚广东宏远和辽宁男篮进行了激烈一战,比赛中可以看到广东宏远的状态并不太好,而反观辽宁男篮这边,状态非常不错,打得广东宏远连连败退,最后辽宁男篮拿下了第一场比赛贝弗利才是狼王,森林狼晋级,唐斯犯满华子拉塞尔59分卢指导失策西部附加赛第一场,快船客场挑战森林狼,本场比赛客队不但没有等到伦纳德的复出,连三分投篮命中率排名联盟第一的肯纳德也因伤缺阵。卢指导比赛开局森林狼凭借爱德华兹对位优势3中3打出7比2拒绝涨薪,回归篮网!年少轻狂遭杜兰特批评,离开哈登你还能提升我们必须要在场上去尊重任何出场比赛的对手,你完全没必要在比赛开打之前说这种屁话(Youdontneedtosaystlikethat),我们场上见就完了。这是篮网前锋凯文杜兰特在球国乒天才郭跃16岁成世界冠军,26岁退役,父亲年少成名毁了她中国乒乓球领域中,出现过很多优秀的乒乓球运动员,顺利的话,他们可以在乒坛中创造自己的传奇,去参加奥运会,世界杯,去争夺金牌和荣誉。但也有很多运动员一开始太过瞩目,天赋显著,进步迅速拒绝召回张明池!广东宏远三大内线死磕辽宁,杜锋能否上演奇迹?广东与辽宁半决赛首战已经结束,从比赛的过程来看,广东宏远明显处于劣势,就连之前引以为傲的锋线优势也无法发挥出来。在内线方面,辽宁队的韩德君遭到了限制,但是杨鸣在第二阵容激活了莫兰德樊振东和孙颖莎之间再添深层次的关系,不仅是队友那么简单啦众所周知,国家乒乓球队现阶段一共有两个横空出世的天才,一个人就是男队的樊振东,另一个就是女队的孙颖莎,两人有着相同的经历,都是凭借一场比赛突出重围,产生一鸣惊人的效果!那么除了队友衬衫配裤子不流行了,太普通!时尚博主都在搭裙子,时髦还显瘦经典百搭的衬衫是每个女孩子衣柜里都有的款式,不会穿衣搭配的女孩子穿衬衫要么是当工装,要么是穿牛仔裤。虽然不会不好看,但是走在大街上实在是不起眼,说实在的,衬衫配裤子不流行了,太普通贝克汉姆长子结婚,新娘婚纱造型简约高奢,女方妈妈气质碾压贝嫂贝克汉姆夫妇一直以来都备受大众的关注,最近大儿子布鲁克林结婚也成了饭后茶余的话题,和妻子妮可拉相恋多年终于迎来了结局。婚礼当天新娘的婚纱造型非常简约高奢,不仅花费300万英镑(将近戚薇真不愧是时髦精,西装都要塞进短裤里,普通人可驾驭不了随着oversize风的兴起,让原本以严肃正式感为主的西装也多了一些休闲慵懒的时尚气息,适用的场所不再局限于职场,而是更多的出现在我们的日常生活中,靠着能够塑造直角肩效果的垫肩设计越简约越高级!看日本时髦精的衬衫搭配攻略,照着穿显瘦又洋气穿搭对于女性来说是生活中不可缺少的一环,占据着比较重要的位置,大家都想让自己看起来更时尚一点,所以学习时尚穿搭就成为了一门必修课。虽然我见过很多时尚潮流的造型,但我依旧认为越简约的
极米newz6x投影仪一个月深度体验评测作为工作的租房党,对拥有一台大屏观影设备种草已久,电视现在其实已经白菜价了,但是考虑到搬家等因素,所以买了投影仪结合这些天几乎每天都在用的使用体验,分享给xdm1投影效果晚上关灯使从3499跌至2399,鸿蒙系统100W快充超曲面屏,余承东良心了华为手机并非主打性价比手机,因此有些网友吐槽华为手机性价比不高,如果你想要性价比高的手机,可以考虑红米或者realme。华为主打的是极致用户体验和高品质手机,很多手机口碑均很好,即开车在上路碰到这些情况会不会影响到你的心情?作为一个老司机,不免经常开车在路上狂奔,看到路边美丽的风景时,心情自然是很好,会不经意地打开车载音乐边欣赏边开车。有经过植被茂盛的地方,打开车窗,还能更好地享受不断灌入车里的清新空春天是生长黄金季,若不差钱,这菜三天两头给孩子吃长个头更聪明进入四月,万物生长,到处都是一片生机勃勃的景象,这时人体新陈代谢加快,也是孩子们生长发育,身体猛蹿的黄金季节。研究证实,春季(35月)是儿童的生长发育速度最快的季节,家长们再忙也得了解了这3件事,能帮你尽早把空腹血糖降到7。0mmolL以下,看看医生和你讲过吗空腹血糖可以反映自身的基础胰岛素的分泌能力以及判断药物的远期疗效。空腹血糖高于7。0mmolL,将会影响全天的血糖控制,可见空腹血糖达标的重要性。了解了以下3件事,有助于您的空腹血槐花散善治痔疮便血,槐花研末外敷也有效长时间过食辛辣温燥食物特别是辣椒等,或久立久坐以及不良的排便习惯都可能诱发痔疮,各个年龄段都有可能发病,以中老年人居多,痔疮症状的特殊性会给患者生活和工作造成极大的影响。对于风热(药性歌括四百味草豆蔻草豆蔻歌诀草蔻辛温,治寒犯胃,作痛呕吐,不食能食。译注草豆蔻味辛,性温。有温胃散寒健脾燥湿的作用,可治胃部受寒作痛,胀满呕吐,以及寒湿内停的胃口不开不思饮食等症。应用用治脾胃虚弱,金晨美图来袭热爱运动的金晨,运动气息扑面而来。天鹅颈锁骨太好看了。抹胸露肩黑色皮裙,气质非凡。抹胸露肩吊带连衣裙,精致的五官,整个人被美呆住。碎钻石吊带裙,好身材尽情展现。黑色连衣裙和耳饰吊坠突发!王祖蓝宣布辞任TVB高层,钟嘉欣未能获封视后成导火索本文编辑剧透社issac未经授权严禁转载,发现抄袭者将进行全网投诉据港媒最新报道,TVB高层又变天!去年年初才刚刚上任,担当高层首席创意官的王祖蓝,已经在近日正式宣布辞职!而TVB半决赛辽粤大战杨鸣手握三张王牌占得先机,广东取胜只能靠此人CBA季后赛正在如火如荼的进行当中,去年总决赛交手的两支队伍,广东宏远和辽宁本钢再次在半决赛中相遇,这场火星撞地球般的对决,也是吸引了无数球迷的关注,究竟是广东队可以延续自己对辽宁李春江队员的团结和拼劲令我感动王哲林是我们队魂ampampamp能带动全队直播吧4月10日讯今日CBA季后赛,上海20淘汰深圳闯进四强。赛后主帅李春江接受了媒体采访。谈到自己对本场比赛的点评时,李春江说道这场比赛我觉得大家准备得相当不错,特别是在防守上,