文章采集完(b+tree+索引怎么办?——简单查询集合)
优采云 发布时间: 2021-11-13 05:00文章采集完(b+tree+索引怎么办?——简单查询集合)
文章采集完成以后,我们进行的不仅仅是数据处理,还有复杂查询优化工作。可是,对于简单的查询来说,难免会遇到下面这些问题:假设一定要在数据库中查询一个人,如果重复数据量过大,是不是就会非常难处理?每次查询如果顺序颠倒是不是就会变成好几次查询呢?问题一:重复数据量过大该怎么办?复杂查询一般指的是,由表里面的数据及关系构成的一个庞大的查询集合。
相比于其他简单的查询,简单查询集合更具有可维护性,更容易对数据进行变更。举个例子,一个时间查询程序,如果用传统的mysql常用的b+tree索引来处理,这个程序就是一个简单的复杂查询。而如果用一个普通的hashmap来代替索引呢?大概就类似上面的样子了。对于大数据量的复杂查询,对于表格结构复杂的查询,传统的b+tree索引所占的空间会非常大,变更维护也十分困难。
除此之外,数据关系的复杂程度往往远远超出理解b+tree索引的空间来源的那么大。其实,在简单查询里面,最消耗资源的就是b+tree索引了。可是,传统关系型数据库的b+tree索引并不是很容易用代码搞定的。就拿中文分词来说,中文常常长度在500-1000词条左右,如果使用b+tree,那就得使用5层,每层需要储存1000个左右的字符串,而如果使用hash表存储呢?那节省的空间可能就只有500字节了。
当然,对于简单查询来说,使用hash表存储没什么不妥。但是在一些大型的查询中,通常需要记录大量的关系数据,通过记录关系就可以一个表达相关的多条线索。或者一个简单的关系必须要有3-5个条件,使用3-5个表达关系数据能更好的保证关系数据的可读性。对于这类复杂的关系,查询优化是比数据处理优化更为重要的事情。
以查询一个人为例,一个人在一个新建的查询语句里面的作用就是对应一个关系。例如说一个人通过长相性别等特征找到他是一个人。那么在这个查询语句里面他到底是一个人还是一个长相,性别等特征,甚至是他是一个男人还是一个女人,这些都是相关的并且是一个特定的表。只有查询集合里面的关系足够多足够清晰,那么从这些相关的查询中进行筛选得到他们都需要的结果,才是在简单查询里面最高效率的办法。
大家都知道,衡量复杂查询是否性能好,通常看他的表达式数量,但是如果表达式过多,那么他通常性能就会被简单查询表达式所抛弃。举一个例子:如果有人想查找在*敏*感*词*用中文拼音拼读大陆的地名。那么这个查询是非常复杂的,我想很多简单的查询,就可以得到一个关系而且不占用更多空间。例如你在mysql里面查询大陆的地名,得到地名或者你在mysql里面得到用拼。