导读:DDL操作是否会导致索引失效的原则上是看是否引起数据发生变化,如果分区的数据发生了改变,则索引需要失效才能保证结果的准确性,如果数据没有发生变化,则索引的状态不会变为UNUSABLE。

要对产品库上的分区进行SPLIT操作,于是首先评估一下SPLIT操作对索引的影响,结果发现测试的结果和文档上描述的不大一样。

在Oracle文档上对于分区的SPLIT操作是这样描述的:

Oracle invalidates any global indexes on heap-organized tables. You can update these indexes during this operation using the update_global_index_clause.

而测试的结果表明,无论是GLOBAL索引还是LOCAL索引,在进行分区操作后,索引是否变为UNUSABLE状态,是由索引数据是否发生变化决定的。

下面看具体的测试:


SQL> CREATE TABLE T_PARTITION (ID NUMBER, FIRST_NAME VARCHAR2(30), LAST_NAME VARCHAR2(30))2  PARTITION BY RANGE (ID)3  (PARTITION P1 VALUES LESS THAN (100),4  PARTITION P2 VALUES LESS THAN (200),5  PARTITION P3 VALUES LESS THAN (MAXVALUE));
表已创建。
SQL> CREATE INDEX IND_T_PARTITION_F_NAME ON T_PARTITION(FIRST_NAME);
索引已创建。
SQL> CREATE INDEX IND_T_PARTITION_L_NAME ON T_PARTITION(LAST_NAME) LOCAL;
索引已创建。
SQL> INSERT INTO T_PARTITION VALUES (50, 'A', 'A');
已创建 1 行。
SQL> INSERT INTO T_PARTITION VALUES (150, 'B', 'B');
已创建 1 行。
SQL> COMMIT;
提交完成。
SQL> SELECT INDEX_NAME, STATUS FROM USER_INDEXES WHERE TABLE_NAME = 'T_PARTITION';
INDEX_NAME                     STATUS
------------------------------ --------
IND_T_PARTITION_F_NAME         VALID
IND_T_PARTITION_L_NAME         N/A
SQL> SELECT INDEX_NAME, PARTITION_NAME, STATUS FROM USER_IND_PARTITIONS2  WHERE INDEX_NAME = 'IND_T_PARTITION_L_NAME';
INDEX_NAME                     PARTITION_NAME                 STATUS
------------------------------ ------------------------------ --------
IND_T_PARTITION_L_NAME         P1                             USABLE
IND_T_PARTITION_L_NAME         P2                             USABLE
IND_T_PARTITION_L_NAME         P3                             USABLE

首先创建一个分区表,分别在FIRST_NAME和LAST_NAME上建立GLOBAL索引和LOCAL索引。

下面对P3分区进行SPLIT操作,注意一点,P3分区的下限是200,而插入数据的分区键值均小于200,所以P3分区目前是空的。


SQL> SELECT COUNT(*) FROM T_PARTITION PARTITION (P3);COUNT(*)
----------0
SQL> ALTER TABLE T_PARTITION SPLIT PARTITION P3 AT (300) INTO (PARTITION P3, PARTITION P4);
表已更改。
SQL> SELECT INDEX_NAME, STATUS FROM USER_INDEXES WHERE TABLE_NAME = 'T_PARTITION';
INDEX_NAME                     STATUS
------------------------------ --------
IND_T_PARTITION_F_NAME         VALID
IND_T_PARTITION_L_NAME         N/A
SQL> SELECT INDEX_NAME, PARTITION_NAME, STATUS FROM USER_IND_PARTITIONS2  WHERE INDEX_NAME = 'IND_T_PARTITION_L_NAME';
INDEX_NAME                     PARTITION_NAME                 STATUS
------------------------------ ------------------------------ --------
IND_T_PARTITION_L_NAME         P1                             USABLE
IND_T_PARTITION_L_NAME         P2                             USABLE
IND_T_PARTITION_L_NAME         P3                             USABLE
IND_T_PARTITION_L_NAME         P4                             USABLE

当进行SPLIT操作的分区为空时,无论是GLOBAL索引还是LOCAL索引,状态均为USABLE。

如果在P3中插入一条记录,插入记录小于SPLIT操作的AT值,也就是说,在进行SPLIT操作后,插入记录会存在于分区键值小的分区中,这时如果对分区进行SPLIT操作:

SQL> ALTER TABLE T_PARTITION MERGE PARTITIONS P3, P4 INTO PARTITION P4;
表已更改。
SQL> SELECT INDEX_NAME, STATUS FROM USER_INDEXES WHERE TABLE_NAME = 'T_PARTITION';
INDEX_NAME                     STATUS
------------------------------ --------
IND_T_PARTITION_F_NAME         VALID
IND_T_PARTITION_L_NAME         N/A
SQL> SELECT INDEX_NAME, PARTITION_NAME, STATUS FROM USER_IND_PARTITIONS2  WHERE INDEX_NAME = 'IND_T_PARTITION_L_NAME';
INDEX_NAME                     PARTITION_NAME                 STATUS
------------------------------ ------------------------------ --------
IND_T_PARTITION_L_NAME         P1                             USABLE
IND_T_PARTITION_L_NAME         P2                             USABLE
IND_T_PARTITION_L_NAME         P4                             USABLE
SQL> INSERT INTO T_PARTITION VALUES (250, 'C', 'C');
已创建 1 行。
SQL> COMMIT;
提交完成。
SQL> ALTER TABLE T_PARTITION SPLIT PARTITION P4 AT (300) INTO (PARTITION P3, PARTITION P4);
表已更改。
SQL> SELECT INDEX_NAME, STATUS FROM USER_INDEXES WHERE TABLE_NAME = 'T_PARTITION';
INDEX_NAME                     STATUS
------------------------------ --------
IND_T_PARTITION_F_NAME         VALID
IND_T_PARTITION_L_NAME         N/A
SQL> SELECT INDEX_NAME, PARTITION_NAME, STATUS FROM USER_IND_PARTITIONS2  WHERE INDEX_NAME = 'IND_T_PARTITION_L_NAME';
INDEX_NAME                     PARTITION_NAME                 STATUS
------------------------------ ------------------------------ --------
IND_T_PARTITION_L_NAME         P1                             USABLE
IND_T_PARTITION_L_NAME         P2                             USABLE
IND_T_PARTITION_L_NAME         P3                             USABLE
IND_T_PARTITION_L_NAME         P4                             USABLE

通过测试可以发现,全局索引和分区索引仍然没有发生状态的改变。这是由于表中数据的存储位置并没有发生变化。最多只是分区的名称发生了变化。表中数据位置不变,索引中记录的ROWID就不会发生变化,因此索引仍然是可用的。

当使用MERGE分区操作,将分区合并为三个分区时:

SQL> SELECT ROWID, ID FROM T_PARTITION WHERE ID = 250;
ROWID                      ID
------------------ ----------
AAAKOJAAPAABd/kAAA        250
SQL> ALTER TABLE T_PARTITION MERGE PARTITIONS P3, P4 INTO PARTITION P4;
表已更改。
SQL> SELECT INDEX_NAME, STATUS FROM USER_INDEXES WHERE TABLE_NAME = 'T_PARTITION';
INDEX_NAME                     STATUS
------------------------------ --------
IND_T_PARTITION_F_NAME         UNUSABLE
IND_T_PARTITION_L_NAME         N/A
SQL> SELECT INDEX_NAME, PARTITION_NAME, STATUS FROM USER_IND_PARTITIONS2  WHERE INDEX_NAME = 'IND_T_PARTITION_L_NAME';
INDEX_NAME                     PARTITION_NAME                 STATUS
------------------------------ ------------------------------ --------
IND_T_PARTITION_L_NAME         P1                             USABLE
IND_T_PARTITION_L_NAME         P2                             USABLE
IND_T_PARTITION_L_NAME         P4                             UNUSABLE
SQL> SELECT ROWID, ID FROM T_PARTITION WHERE ID = 250;
ROWID                      ID
------------------ ----------
AAAKOPAAQAABet8AAA        250

发现GLOBAL索引和LOCAL索引的P4分区的状态变为了UNUSABLE。这是由于MERGE操作的特点,MERGE操作会建立一个新的分区,将原始两个分区的数据放入新的分区,然后删除旧的分区。因此,MERGE操作会发生数据的转移,这一点通过ROWID的变化也可以看出来。

将UNUSABLE的索引重建后,再插入一条记录,使得SPLIT分区后,P4分区中的两条记录分别处于两个新分区中:


SQL> ALTER INDEX IND_T_PARTITION_F_NAME REBUILD;
索引已更改。
SQL> ALTER INDEX IND_T_PARTITION_L_NAME REBUILD PARTITION P4;
索引已更改。
SQL> SELECT INDEX_NAME, STATUS FROM USER_INDEXES WHERE TABLE_NAME = 'T_PARTITION';
INDEX_NAME                     STATUS
------------------------------ --------
IND_T_PARTITION_F_NAME         VALID
IND_T_PARTITION_L_NAME         N/A
SQL> SELECT INDEX_NAME, PARTITION_NAME, STATUS FROM USER_IND_PARTITIONS2  WHERE INDEX_NAME = 'IND_T_PARTITION_L_NAME';
INDEX_NAME                     PARTITION_NAME                 STATUS
------------------------------ ------------------------------ --------
IND_T_PARTITION_L_NAME         P1                             USABLE
IND_T_PARTITION_L_NAME         P2                             USABLE
IND_T_PARTITION_L_NAME         P4                             USABLE
SQL> INSERT INTO T_PARTITION VALUES (350, 'D', 'D');
已创建 1 行。
SQL> COMMIT;
提交完成。
SQL> ALTER TABLE T_PARTITION SPLIT PARTITION P4 AT (300) INTO (PARTITION P3, PARTITION P4);
表已更改。
SQL> SELECT INDEX_NAME, STATUS FROM USER_INDEXES WHERE TABLE_NAME = 'T_PARTITION';
INDEX_NAME                     STATUS
------------------------------ --------
IND_T_PARTITION_F_NAME         UNUSABLE
IND_T_PARTITION_L_NAME         N/A
SQL> SELECT INDEX_NAME, PARTITION_NAME, STATUS FROM USER_IND_PARTITIONS2  WHERE INDEX_NAME = 'IND_T_PARTITION_L_NAME';
INDEX_NAME                     PARTITION_NAME                 STATUS------------------------------ ------------------------------ --------
IND_T_PARTITION_L_NAME         P1                             USABLE
IND_T_PARTITION_L_NAME         P2                             USABLE
IND_T_PARTITION_L_NAME         P3                             UNUSABLE
IND_T_PARTITION_L_NAME         P4                             UNUSABLE

和预料中的一样,无论是GLOBAL索引还是发生数据变化的两个分区的分区索引,状态都变为了UNUSABLE,下面的MERGE操作也是如此:

SQL> ALTER INDEX IND_T_PARTITION_F_NAME REBUILD;
索引已更改。
SQL> ALTER INDEX IND_T_PARTITION_L_NAME REBUILD PARTITION P3;
索引已更改。
SQL> ALTER INDEX IND_T_PARTITION_L_NAME REBUILD PARTITION P4;
索引已更改。
SQL> SELECT INDEX_NAME, STATUS FROM USER_INDEXES WHERE TABLE_NAME = 'T_PARTITION';
INDEX_NAME                     STATUS
------------------------------ --------
IND_T_PARTITION_F_NAME         VALID
IND_T_PARTITION_L_NAME         N/A
SQL> SELECT INDEX_NAME, PARTITION_NAME, STATUS FROM USER_IND_PARTITIONS2  WHERE INDEX_NAME = 'IND_T_PARTITION_L_NAME';
INDEX_NAME                     PARTITION_NAME                 STATUS
------------------------------ ------------------------------ --------
IND_T_PARTITION_L_NAME         P1                             USABLE
IND_T_PARTITION_L_NAME         P2                             USABLE
IND_T_PARTITION_L_NAME         P3                             USABLE
IND_T_PARTITION_L_NAME         P4                             USABLE
SQL> ALTER TABLE T_PARTITION MERGE PARTITIONS P3, P4 INTO PARTITION P4;
表已更改。
SQL> SELECT INDEX_NAME, STATUS FROM USER_INDEXES WHERE TABLE_NAME = 'T_PARTITION';
INDEX_NAME                     STATUS
------------------------------ --------
IND_T_PARTITION_F_NAME         UNUSABLE
IND_T_PARTITION_L_NAME         N/A
SQL> SELECT INDEX_NAME, PARTITION_NAME, STATUS FROM USER_IND_PARTITIONS2  WHERE INDEX_NAME = 'IND_T_PARTITION_L_NAME';
INDEX_NAME                     PARTITION_NAME                 STATUS
------------------------------ ------------------------------ --------
IND_T_PARTITION_L_NAME         P1                             USABLE
IND_T_PARTITION_L_NAME         P2                             USABLE
IND_T_PARTITION_L_NAME         P4                             UNUSABLE
SQL> ALTER INDEX IND_T_PARTITION_F_NAME REBUILD;
索引已更改。
SQL> ALTER INDEX IND_T_PARTITION_L_NAME REBUILD PARTITION P4;
索引已更改。
SQL> SELECT INDEX_NAME, STATUS FROM USER_INDEXES WHERE TABLE_NAME = 'T_PARTITION';
INDEX_NAME                     STATUS
------------------------------ --------
IND_T_PARTITION_F_NAME         VALIDIND_T_PARTITION_L_NAME         N/A
SQL> SELECT INDEX_NAME, PARTITION_NAME, STATUS FROM USER_IND_PARTITIONS2  WHERE INDEX_NAME = 'IND_T_PARTITION_L_NAME';
INDEX_NAME                     PARTITION_NAME                 STATUS
------------------------------ ------------------------------ --------
IND_T_PARTITION_L_NAME         P1                             USABLE
IND_T_PARTITION_L_NAME         P2                             USABLE
IND_T_PARTITION_L_NAME         P4                             USABLE

下面删掉ID等于250的数据,使得SPLIT分区后,数据只保存在分区键值高的分区中:


SQL> DELETE T_PARTITION WHERE ID = 250;
已删除 1 行。
SQL> COMMIT;
提交完成。
SQL> SELECT ROWID, ID FROM T_PARTITION WHERE ID = 350;
ROWID                      ID
------------------ ----------
AAAKOaAAQAABet8AAB        350
SQL> ALTER TABLE T_PARTITION SPLIT PARTITION P4 AT (300) INTO (PARTITION P3, PARTITION P4);
表已更改。
SQL> SELECT INDEX_NAME, STATUS FROM USER_INDEXES WHERE TABLE_NAME = 'T_PARTITION';
INDEX_NAME                     STATUS
------------------------------ --------
IND_T_PARTITION_F_NAME         VALID
IND_T_PARTITION_L_NAME         N/A
SQL> SELECT INDEX_NAME, PARTITION_NAME, STATUS FROM USER_IND_PARTITIONS2  WHERE INDEX_NAME = 'IND_T_PARTITION_L_NAME';
INDEX_NAME                     PARTITION_NAME                 STATUS
------------------------------ ------------------------------ --------
IND_T_PARTITION_L_NAME         P1                             USABLE
IND_T_PARTITION_L_NAME         P2                             USABLE
IND_T_PARTITION_L_NAME         P3                             USABLE
IND_T_PARTITION_L_NAME         P4                             USABLE
SQL> SELECT ROWID, ID FROM T_PARTITION WHERE ID = 350;
ROWID                      ID
------------------ ----------
AAAKOaAAQAABet8AAB        350

索引的状态仍然都是USABLE,数据也没有发生位置的变化,通过ROWID也可以证实这一点。在SPLIT操作中,Oracle可以判断出是否SPLIT的某个分区不包含数据,如果其中一个不包含数据,Oracle不需要转移数据,而直接将包含全部数据的新分区指向原始分区。

最后看一下TRUNCATE和DROP PARTITION的操作:

SQL> ALTER TABLE T_PARTITION TRUNCATE PARTITION P4;
表被截断。
SQL> SELECT INDEX_NAME, STATUS FROM USER_INDEXES WHERE TABLE_NAME = 'T_PARTITION';
INDEX_NAME                     STATUS
------------------------------ --------
IND_T_PARTITION_F_NAME         UNUSABLE
IND_T_PARTITION_L_NAME         N/A
SQL> SELECT INDEX_NAME, PARTITION_NAME, STATUS FROM USER_IND_PARTITIONS2  WHERE INDEX_NAME = 'IND_T_PARTITION_L_NAME';
INDEX_NAME                     PARTITION_NAME                 STATUS
------------------------------ ------------------------------ --------
IND_T_PARTITION_L_NAME         P1                             USABLE
IND_T_PARTITION_L_NAME         P2                             USABLE
IND_T_PARTITION_L_NAME         P3                             USABLE
IND_T_PARTITION_L_NAME         P4                             USABLE
SQL> ALTER INDEX IND_T_PARTITION_F_NAME REBUILD;
索引已更改。
SQL> SELECT INDEX_NAME, STATUS FROM USER_INDEXES WHERE TABLE_NAME = 'T_PARTITION';
INDEX_NAME                     STATUS
------------------------------ --------
IND_T_PARTITION_F_NAME         VALID
IND_T_PARTITION_L_NAME         N/A
SQL> INSERT INTO T_PARTITION VALUES (350, 'D', 'D');
已创建 1 行。
SQL> COMMIT;
提交完成。
SQL> ALTER TABLE T_PARTITION DROP PARTITION P4;
表已更改。
SQL> SELECT INDEX_NAME, STATUS FROM USER_INDEXES WHERE TABLE_NAME = 'T_PARTITION';
INDEX_NAME                     STATUS
------------------------------ --------
IND_T_PARTITION_F_NAME         UNUSABLE
IND_T_PARTITION_L_NAME         N/A
SQL> SELECT INDEX_NAME, PARTITION_NAME, STATUS FROM USER_IND_PARTITIONS2  WHERE INDEX_NAME = 'IND_T_PARTITION_L_NAME';
INDEX_NAME                     PARTITION_NAME                 STATUS
------------------------------ ------------------------------ --------
IND_T_PARTITION_L_NAME         P1                             USABLE
IND_T_PARTITION_L_NAME         P2                             USABLE
IND_T_PARTITION_L_NAME         P3                             USABLE
SQL> ALTER INDEX IND_T_PARTITION_F_NAME REBUILD;
索引已更改。
SQL> SELECT INDEX_NAME, STATUS FROM USER_INDEXES WHERE TABLE_NAME = 'T_PARTITION';
INDEX_NAME                     STATUS
------------------------------ --------
IND_T_PARTITION_F_NAME         VALID
IND_T_PARTITION_L_NAME         N/A

上面是TRUNCATE或DROP分区时,分区中包含数据的情况,这个时候只有GLOBAL索引会受分区影响而改变状态。可以推断,如果分区中不包含数据,那么无论是TRUNCATE分区还是DROP分区,都不会影响任何的索引:

SQL> ALTER TABLE T_PARTITION ADD PARTITION P4 VALUES LESS THAN (MAXVALUE);
表已更改。
SQL> SELECT INDEX_NAME, STATUS FROM USER_INDEXES WHERE TABLE_NAME = 'T_PARTITION';
INDEX_NAME                     STATUS
------------------------------ --------
IND_T_PARTITION_F_NAME         VALID
IND_T_PARTITION_L_NAME         N/A
SQL> SELECT INDEX_NAME, PARTITION_NAME, STATUS FROM USER_IND_PARTITIONS2  WHERE INDEX_NAME = 'IND_T_PARTITION_L_NAME';
INDEX_NAME                     PARTITION_NAME                 STATUS
------------------------------ ------------------------------ --------
IND_T_PARTITION_L_NAME         P1                             USABLE
IND_T_PARTITION_L_NAME         P2                             USABLE
IND_T_PARTITION_L_NAME         P3                             USABLE
IND_T_PARTITION_L_NAME         P4                             USABLE
SQL> ALTER TABLE T_PARTITION TRUNCATE PARTITION P4;
表被截断。
SQL> SELECT INDEX_NAME, STATUS FROM USER_INDEXES WHERE TABLE_NAME = 'T_PARTITION';
INDEX_NAME                     STATUS
------------------------------ --------
IND_T_PARTITION_F_NAME         VALID
IND_T_PARTITION_L_NAME         N/A
SQL> SELECT INDEX_NAME, PARTITION_NAME, STATUS FROM USER_IND_PARTITIONS2  WHERE INDEX_NAME = 'IND_T_PARTITION_L_NAME';
INDEX_NAME                     PARTITION_NAME                 STATUS
------------------------------ ------------------------------ --------
IND_T_PARTITION_L_NAME         P1                             USABLE
IND_T_PARTITION_L_NAME         P2                             USABLE
IND_T_PARTITION_L_NAME         P3                             USABLE
IND_T_PARTITION_L_NAME         P4                             USABLE
SQL> ALTER TABLE T_PARTITION DROP PARTITION P4;
表已更改。
SQL> SELECT INDEX_NAME, STATUS FROM USER_INDEXES WHERE TABLE_NAME = 'T_PARTITION';
INDEX_NAME                     STATUS
------------------------------ --------
IND_T_PARTITION_F_NAME         VALID
IND_T_PARTITION_L_NAME         N/A
SQL> SELECT INDEX_NAME, PARTITION_NAME, STATUS FROM USER_IND_PARTITIONS2  WHERE INDEX_NAME = 'IND_T_PARTITION_L_NAME';
INDEX_NAME                     PARTITION_NAME                 STATUS
------------------------------ ------------------------------ --------
IND_T_PARTITION_L_NAME         P1                             USABLE
IND_T_PARTITION_L_NAME         P2                             USABLE
IND_T_PARTITION_L_NAME         P3                             USABLE

最后总结一下:当发生分区操作时,无论是GLOBAL索引还是LOCAL索引,索引状态的变化都只和索引中数据是否发生了变化有关。而LOCAL索引的优势就体现在这一点,对于TRUNCATE和DROP等分区操作,根本不会影响LOCAL索引状态,而对于SPLIT和MERGE操作,也只是会影响到操作涉及的分区。而对于GLOBAL索引,只有发生数据位置的变化,则会影响整个索引。

当然指定UPDATE GLOBAL INDEX语句可以同步更新GLOBAL索引,但是对于LOCAL索引并没有同步维护的方法。所以,最好在操作前对操作会产生何种影响了然于胸,在进行操作的时候才能更加得心应手。

比如,对于SPLIT操作,尤其是对包含MAXVALUE的分区进行的SPLIT操作,是分区表经常会碰到的操作,这个操作最好在分区中未包含数据时进行,如果要操作的分区已经包含了数据,最好可以通过SPLIT操作将现存分区中所有数据划分到一个分区中,这样对系统影响最小,性能也最高。而MERGE分区操作,则应该尽可能的避免,除非是MERGE两个空的分区,否则都会影响索引的可用性。

原文:墨天轮(https://www.modb.pro/db/15428)


推荐阅读:144页!分享珍藏已久的数据库技术年刊

点击下图查看更多 ↓

云和恩墨大讲堂 | 一个分享交流的地方

长按,识别二维码,加入万人交流社群

请备注:云和恩墨大讲堂

  点个“在看”

你的喜欢会被看到????

分区操作后索引的状态相关推荐

  1. 【Oracle】表级别分区操作对索引(本地分区索引,全局分区索引,非分区索引)的影响

    --参考自<Oracle索引技术> 先贴上结论吧: 下面对以上几种操作分别测试: 创建测试表及索引 --创建测试分区表 CREATE TABLE employees_parttest (e ...

  2. elasticsearch 索引 red 状态恢复 green

    ES集群状态.节点.索引及基本查询 一.elasticsearch 索引 red 状态恢复 green 错误原因 由于CPU占用过高或者有部分节点的分片不可用,未被分配: 解决: 重新分配未被分配的分 ...

  3. Flutter切换tab后保留tab状态

    Flutter切换tab后保留tab状态 概述 Flutter中为了节约内存不会保存widget的状态,widget都是临时变量.当我们使用TabBar,TabBarView是我们就会发现,切换tab ...

  4. android studio 无法输入中文,Android Studio 升级到3.0后输入法中文状态下无法选词的终极解决方案...

    AndroidStudio终于出3.0正式版了,内置了kotlin(虽然我安了插件一直能用).一直忍着没敢下rc版的好奇猫,总算装了正式版.当然,伴随每次大版本更新,总有一些恼人的后遗症,其中以gra ...

  5. ES系列:查看所有索引及其状态

    命令行: curl -XGET 'localhost:9200/_cat/indices?v&pretty' 浏览器: http://localhost:9200/_cat/indices?v ...

  6. 系统重启后,VCS状态ADMIN_WAIT or STALE_ADMIN_WAIT

    VCS教程 http://hobgoblinconsulting.com/hints/vxvm/vcs/ 系统重启后,VCS状态为ADMIN_WAIT or STALE_ADMIN_WAIT Afte ...

  7. Web3.0 像是宇宙大爆炸后的混沌状态#光点TALK

    王萌 | 新媒体艺术家 | 放射能视觉工作室创始人 | | 王萌+于淼 音乐组合成员 | 王萌在音乐舞台多媒体设计领域享有盛誉,其合作艺人包括 李宇春.李志.李泉.丁薇.谢天笑.Jony J.鹿先森乐 ...

  8. 电脑开始关机待机重启出现计算机,电脑关机后进入待机状态如何解决 电脑关机后自动开机怎么回事...

    在日常使用电脑的时候,如果我们没有定时的清理和保养,难免会遇到一些电脑故障问题,近日很多电脑用户都遇到了电脑开机后进入待机状态的问题,这很可能是计算机命令执行错误引起的,那么该怎么办呢?其实方法很简单 ...

  9. [ lucene FAQ ] 当磁盘索引被IndexSearcher打开时,为什么优化操作后索引容量翻倍?...

    lucene问题汇总: Lucene常见问题汇总 当IndexSearcher打开一份磁盘索引后,IndexSearcher实例持有的是打开索引时的一份镜像索引,而执行优化动作后,将会把优化后的索引存 ...

最新文章

  1. 安测云验证有CTA问题
  2. Dotween的timeScale
  3. LeetCode 2185. 统计包含给定前缀的字符串
  4. 摘抄:微软 Dynamics AX 学习步骤
  5. IDEA中启动tomcat
  6. 现在在做的项目的一些感想.
  7. c# word文档与二进制数据的相互转换
  8. Button的UseSubmitBehavior屬性
  9. Java学习教程,Java基础教程(从入门到精通)
  10. wps专业增强版_Win干货 | WPS专业版永久破戒使用
  11. C3之text属性的补充
  12. 阿里云服务器选购之国际版和国内版的平台对比及建议
  13. Ubuntu 11.04 安装配置过程
  14. 拆分单元格怎么弄?合并起来了怎么办?
  15. python不合法的布尔表达式,python笔试题22-41
  16. 游戏挂机时计算机设置在哪里,电脑挂机锁如何设置 电脑挂机锁设置方法【图文】...
  17. 华为OD机试 - 按身高和体重排队(Java) | 机试题算法思路 【2023】
  18. GDKOI2023 D2T1
  19. php 警告提示框,js弹出对话框(消息框、警告框)
  20. NO.2-24 [网鼎杯 2020 朱雀组]Nmap

热门文章

  1. java开发者工具开源版_开源工具如何帮助飓风受害者
  2. (26)Vue.js组件通信—props 命名规则
  3. 了解 | 你必须了解的Mysql 三大日志
  4. C++ 数据抽象 封装 接口
  5. 作为window对象属性的元素 多窗口和窗体
  6. CSS 单词折行 word-wrap属性
  7. CSS 语言伪类选择器
  8. es6 Object.getOwnPropertyDescriptors()
  9. 重新初始化_关窗,也有大学问!宝马车窗初始化设置步骤方法...
  10. flutter和webapp_Flutter 适配移动端和web不同尺寸