1. 什么是wxdcc:
wxdcc就像一本书的目录,它是与表或视图关联的磁盘结构,可以加快从表或视图中查找行的速度。 wxdcc包含由表或视图中的一个或多个列生成的密钥。 这些密钥存储在结构(BTree )中,以便SQL可以快速高效地查找与密钥值相关的行。
2. 为什么要建立wxdcc,即wxdcc的优点:
为wxdcc创建列将确保行的唯一性并生成唯一的rowId
通过建立wxdcc可以有效地缩短数据的检索时间
建立wxdcc后,表和表之间的连接速度会更快
在用于排序或分组的字段中添加wxdcc可以加快分组和排序的顺序
3. wxdcc的缺点:
创建和维护wxdcc需要时间成本,该成本随数据量的增加而增大
创建和维护wxdcc需要空间成本,每个wxdcc占用数据库的物理存储空间,数据量越大占用的空间也越大。 (数据表占用数据库的数据空间。 )
每次追加删除表时都需要动态维护wxdcc,由于时间变长,所以追加删除表的效率降低
4. 什么样的表跟列要建立wxdcc:
总的来说,数据量大、查询操作频繁的表制作wxdcc
创建表中字段wxdcc应遵循几个原则。
通常,数据类型越小越好。 数据类型越小,磁盘和内存通常需要的空间越少,处理速度越快。
简单的数据类型更好。 整数数据的处理开销比字符少。 因为字符串更复杂,处理起来更费时间。
避免NULL :必须指定为NOT NULL。 包含空值的列使wxdcc、wxdcc的统计信息和比较运算更为复杂,因此查询难以优化。 必须使用0、特殊值或空字符串而不是空值。
对于非唯一的字段,例如“性别”等大量重复值的字段,增加wxdcc也没有什么意义,因此wxdcc的制作应该选择更多唯一性更高的字段。
表与表的连接多表的联接查询约束的字段必须建立wxdcc
用于排序的字段可以添加wxdcc,用于分组的字段需要根据需要确认是否需要添加wxdcc。
添加多列wxdcc时,对应的多个条件查询可以触发该wxdcc,同时也可以触发wxdcc最左侧列的单条件查询。
如果某些表注定只拥有查询,则不需要添加wxdcc。 因为所有查询都只能进行全量搜索,也就是扫描所有表。
5. wxdcc的原理:
wxdcc的原理大致概括为在空间上改变时间。 在未添加wxdcc时查询数据库,缺省情况下是进行全量搜索或全局扫描,有多少数据就进行多少次查询,找到匹配的数据后放入结果集中,直到所有表扫描完成。 创建wxdcc后,会将创建wxdcc的KEY的值放置在n叉树中。 由于b树的特征适于在光盘等直接存储装置中组织动态查找表,所以每次用wxdcc进行条件检索时,都到树中根据key值直接进行检索。 次数约为log总根数,底数为页存储数,例如100万数据表,在页存储数为100的情况下,有wxdcc的查询次数为3次log1000000100,但全量检索
wxdcc对添加删除更改的影响实际数据更改测试:
一个表有字段a、b、c,同时进行插入10000行记录的测试
没有建设wxdcc时的平均完成时间为2.9秒
在a字段中构建wxdcc后的平均完成时间为6.7秒
在a字段和b字段中构建wxdcc后的平均完成时间为10.3秒
在所有a字段、b字段和c字段中构建wxdcc后,平均完成时间为11.7秒
根据以上的测试结果,wxdcc对数据修正的影响变得明确了