大数据怎么查大量大数据如何进行查询

健康频道 2020-03-26112未知admin

  注意的是,当count(*)语句包含 where条件时,两种表的操作有些不同,InnoDB类型的表用count(*)或者count(主键),加上where col 条件。其中col列是表的主键之外的具有唯一约束索引的列。这样查询时速度会很快。就是可以避免全表扫描。

  mysql 在300万条数据(myisam引擎)情况下使用 count(*) 进行数据总数查询包含条件(正确设置索引)运行时间正常。对于经常进行读取的数据我们使用myIsam引擎。

  在过程中我们经常会使用分页,核心技术是使用limit进行数据的读取,在使用limit进行分页的测试过程中,得到以下数据:

  我们惊讶的发现mysql在数据量大的情况下分页起点越大查询速度越慢,100万条起的查询速度已经需要7秒钟。这是一个我们无法接受的数值!

  优化效果不明显,条件带来的影响还是很大!在这样的情况下无论我们怎么去优化sql语句就无决运行效率问题。那么换个思:建立一个索引表,只记录文章的id、分类信息,我们将文章内容这个大字段分割出去。

  运行时间 1.23秒,我们可以看到运行时间缩减了近20倍!!数据在10万左右是查询时间可以保持在0.5秒左右,是一个逐步接近我们能够的值!

  但是1秒对于服务器来说依然是一个不能接受的值!!还有什么可以优化的办法吗??我们尝试了一个伟大的变化:

  MySQL有多种存储引擎,MyISAM和InnoDB是其中常用的两种。这里介绍关于这两种引擎的一些基本概念(非深入介绍)。

  MyISAM存储引擎,基于传统的ISAM类型,支持全文搜索,但不是事务安全的,而且不支持外键。每张MyISAM表存放在三个文件中:frm 文件存放表格定义;数据文件是MYD (MYData);索引文件是MYI (MYIndex)。

  InnoDB是事务型引擎,支持回滚、崩溃恢复能力、多版本并发控制、ACID事务,支持行级锁定(InnoDB表的行锁不是绝对的,如果在执行一个SQL语句时MySQL不能确定要扫描的范围,InnoDB表同样会锁全表,如like操作时的SQL语句),以及提供与Oracle类型一致的不加锁读取方式。InnoDB存储它的表和索引在一个表空间中,表空间可以包含数个文件。

  MyISAM相对简单,所以在效率上要优于InnoDB,小型应用可以考虑使用MyISAM。

  MyISAM表是保存成文件的形式,在跨平台的数据转移中使用MyISAM存储会省去不少的麻烦。

  MyISAM管理非事务表。它提供高速存储和检索,以及全文搜索能力。如果应用中需要执行大量的SELECT查询,那么MyISAM是更好的选择。

  InnoDB用于事务处理应用程序,具有众多特性,包括ACID事务支持。如果应用中需要执行大量的INSERT或UPDATE操作,则应该使用InnoDB,这样可以提高多用户并发操作的性能。

  数据库必须有索引,没有索引则检索过程变成了顺序查找,O(n)的时间复杂度几乎是不能的。我们非常容易想象出一个只有单关键字组成的表如何使用B+树进行索引,只要将关键字存储到树的节点即可。当数据库一条记录里包含多个字段时,一棵B+树就只能存储主键,如果检索的主键字段,则主键索引失去作用,又变成顺序查找了。这时应该在第二个要检索的列上建立第二套索引。 这个索引由的B+树来组织。有两种常见的方法可以解决多个B+树访问同一套表数据的问题,一种叫做聚簇索引(clustered index ),一种叫做非聚簇索引(secondary index)。这两个名字虽然都叫做索引,但这并不是一种单独的索引类型,而是一种数据存储方式。对于聚簇索引存储来说,行数据和主键B+树存储在一起,辅助键B+树只存储辅助键和主键,主键和非主键B+树几乎是两种类型的树。对于非聚簇索引存储来说,主键B+树在叶子节点存储指向真正数据行的指针,而非主键。

  InnoDB使用的是聚簇索引,将主键组织到一棵B+树中,而行数据就储存在叶子节点上,若使用where id = 14这样的条件查找主键,则按照B+树的检索算法即可查找到对应的叶节点,之后获得行数据。若对Name列进行条件搜索,则需要两个步骤:第一步在辅助索引B+树中检索Name,到达其叶子节点获取对应的主键。第二步使用主键在主索引B+树种再执行一次B+树检索操作,最终到达叶子节点即可获取整行数据。

  MyISM使用的聚簇索引,非聚簇索引的两棵B+树看上去没什么不同,节点的结构完全一致只是存储的内容不同而已,主键索引B+树的节点存储了主键,辅助键索引B+树存储了辅助键。表数据存储在的地方,这两颗B+树的叶子节点都使用一个地址指向真正的表数据,对于表数据来说,这两个键没有任何差别。由于索引树是的,通过辅助键检索无需访问主键的索引树。

  为了更形象说明这两种索引的区别,我们假想一个表如下图存储了4行数据。其中Id作为主索引,Name作为辅助索引。图示清晰的显示了聚簇索引和非聚簇索引的差异。

  我们重点关注聚簇索引,看上去聚簇索引的效率明显要低于非聚簇索引,因为每次使用辅助索引检索都要经过两次B+树查找,这不是多此一举吗?聚簇索引的优势在哪?

  1 由于行数据和叶子节点存储在一起,这样主键和行数据是一起被载入内存的,找到叶子节点就可以立刻将行数据返回了,如果按照主键Id来组织数据,获得数据更快。

  2 辅助索引使用主键作为指针 而不是使用地址值作为指针的好处是,减少了当出现行或者数据页时辅助索引的工作,使用主键值当作指针会让辅助索引占用更多的空间,换来的好处是InnoDB在行时无须更新辅助索引中的这个指针。也就是说行的(实现中通过16K的Page来定位,后面会涉及)会随着数据库里数据的修改而发生变化(前面的B+树节点以及Page的),使用聚簇索引就可以不管这个主键B+树的节点如何变化,辅助索引树都不受影响。

  所以在百万级数据及更大数据情况下,mysql innoDB 的索引表现更加优秀!

  大多数的MySQL服务器都了查询缓存。这是提高性能最有效的方法之一,而且这是被MySQL的数据库引擎处理的。当有很多相同的查询被执行了多次的时候,这些查询结果会被放到一个缓存中,这样,后续的相同的查询就不用操作表而直接访问缓存结果了。

  这里最主要的问题是,对于程序员来说,这个事情是很容易被忽略的。因为,我们某些查询语句会让MySQL不使用缓存。

  两条SQL语句的差别就是 CURDATE() ,MySQL的查询缓存对这个函数不起作用。所以,像 NOW() 和 RAND() 或是其它的诸如此类的SQL函数都不会查询缓存,因为这些函数的返回是会不定的易变的。所以,你所需要的就是用一个变量来代替MySQL的函数,从而缓存。

  使用EXPLAIN关键字可以让你知道MySQL是如何处理你的SQL语句的。

  索引并不一定就是给主键或是唯一的字段。如果在你的表中,有某个字段你总要会经常用来做搜索、拍下、条件,那么,请为其建立索引吧。

  从数据库里读出越多的数据,那么查询就会变得越慢。并且,如果你的数据库服务器和WEB服务器是两立的服务器的话,这还会增加网络传输的负载。必须应该养成一个需要什么就取什么的好的习惯。

  ENUM 类型常快和紧凑的。在实际上,其保存的是 TINYINT,但其外表上显示为字符串。这样一来,用这个字段来做一些选项列表变得相当的完美。

  如果你有一个字段,比如“性别”,“国家”,“民族”,“状态”或“部门”,你知道这些字段的取值是有限而且固定的,那么,你应该使用 ENUM 而不是 VARCHAR。

  除非你有一个很特别的原因去使用 NULL 值,你应该总是让你的字段保持 NOT NULL。这看起来好像有点争议,请往下看。

  首先,问问你自己“Empty”和“NULL”有多大的区别(如果是INT,那就是0和NULL)?如果你觉得它们之间没有什么区别,那么你就不要使用NULL。(你知道吗?在 Oracle 里,NULL 和 Empty 的字符串是一样的!)

  不要以为 NULL 不需要空间,其需要额外的空间,并且,在你进行比较的时候,你的程序会更复杂。 当然,这里并不是说你就不能使用NULL了,现实情况是很复杂的,依然会有些情况下,你需要使用NULL值。

  很多程序员都会创建一个 VARCHAR(15) 字段来存放字符串形式的IP而不是整形的IP。如果你用整形来存放,只需要4个字节,并且你可以有定长的字段。大数据怎么查而且,这会为你带来查询上的优势,尤其是当你需要使用这样的WHERE条件:IP between ip1 and ip2。

  我们必需要使用UNSIGNED INT,因为 IP地址会使用整个32位的无符整形

  如果表中的所有字段都是“固定长度”的,整个表会被认为是 “static” 或 “fixed-length”。 例如,表中没有如下类型的字段: VARCHAR,TEXT,BLOB。只要你包括了其中一个这些字段,那么这个表就不是“固定长度静态表”了,这样,MySQL 引擎会用另一种方法来处理。

  固定长度的表会提高性能,因为MySQL搜寻得会更快一些,因为这些固定的长度是很容易计算下一个数据的偏移量的,所以读取的自然也会很快。而如果字段不是定长的,那么,每一次要找下一条的话,需要程序找到主键。

  并且,固定长度的表也更容易被缓存和重建。不过,唯一的副作用是,固定长度的字段会浪费一些空间,因为定长的字段无论你用不用,他都是要分配那么多的空间。

  “垂直分割”是一种把数据库中的表按列变成几张表的方法,这样可以降低表的复杂度和字段的数目,从而达到优化的目的。需要注意的是,这些被分出去的字段所形成的表,你不会经常性地去Join他们,不然的话,这样的性能会比不分割时还要差,而且,会是极数级的下降。

  如果在一个在线的网站上去执行一个大的 DELETE 或 INSERT 查询,你需要非常小心,要避免你的操作让你的整个网站停止相应。因为这两个操作是会锁表的,表一锁住了,别的操作都进不来了。

  Apache 会有很多的子进程或线程。所以,其工作起来相当有效率,而我们的服务器也不希望有太多的子进程,线程和数据库链接,这是极大的占服务器资源的事情,尤其是内存。

  如果你把你的表锁上一段时间,比如30秒钟,那么对于一个有很高访问量的站点来说,这30秒所积累的访问进程/线程,数据库链接,打开的文件数,可能不仅仅会让你泊WEB服务Crash,还可能会让你的整台服务器马上掛了。

  对于大多数的数据库引擎来说,硬盘操作可能是最重大的瓶颈。所以,把你的数据变得紧凑会对这种情况非常有帮助,因为这减少了对硬盘的访问。

  MyISAM 适合于一些需要大量查询的应用,但其对于有大量写操作并不是很好。甚至你只是需要update一个字段,整个表都会被锁起来,而别的进程,就算是读进程都无法操作直到读操作完成。另外,MyISAM 对于 SELECT COUNT(*) 这类的计算是超快无比的。

  InnoDB 的趋势会是一个非常复杂的存储引擎,对于一些小的应用,它会比 MyISAM 还慢。他是它支持“行锁” ,于是在写操作比较多的时候,会更优秀。并且,他还支持更多的高级应用,比如:事务。

  在某些时候,可能会涉及在海量数据中的查找,如果采用通常的做法,则很难达到一定的效果,在实际工程实践中,海量数据的查找性能很肯恩鬼成为整个系统的性能瓶颈,在海量数据中的查找包括基于布隆过滤器的方式,以及...博文来自:跋跋寒的博客

  问题描述:涉及到大数据量,多循环查询的时候,往往查询的速度会变慢,影响系统的使用性能。该问题,在测试尚不明显,因为测试的数据量毕竟是有限的。但是,一旦将代码更新到线上的真实系统,因为数据量一下...博文来自:爱健身的小刘

  1.对查询进行优化,应尽量避免全表扫描,首先应考虑在 where 及 order by 涉及的列上建立索引。2.应尽量避免在 where 子句中对字段进行 null 值判断,大数据怎么查否则将导致引擎放弃使用索引...博文来自:把酒问天专栏

  通过java代码修改es的配置,当数据量超过配置的最大返回记录数时,修改查询最大返回记录数;经修改测验,14W数据可以正常查询,并能进行正常的翻页操作,查询效率也基本未受影响;这之前通过游标scrol...博文来自:weixin_39298366的博客

  知乎高赞:中国有什么拿得出手的开源软件产品?在知乎上,有个问题问“中国有什么拿得出手的开源软件产品(在 GitHub 等社区受欢迎度较好的)?”事实上,还不少呢~本人于2019.7.6进行了较为全面的...博文来自:大白技术控 - 大白技术Bravo Yeung

  一.功能性测试       大数据功能主要涉及系统实现面向大数据应用的POSIX API,包括文件读取与访问控制,元数据操作,锁操作等功能;大数据系统的POSIX语义不同,实现的文件系统API...博文来自:test_soy的博客

  中要求从数据库读取GB级别的文件,在CSDN中查询得到了这个用jdbc查询并通过NIO写入本地文件的方法,与大家交流.如果着急粘贴即可使用.如有侵权请作者尽快联系.public class T...博文来自:的博客

  最近在忙着优化集团的一个报表。优化完成后,报表查询速度有从半小时以上(甚至查不出)到秒查的质变。从修改SQL查询语句逻辑到决定创建存储过程实现,花了我3天多的时间,在此总结一下,希望对朋友们有帮助...博文来自:weixin_34252686的博客

  题目描述:在2.5亿个整数中判断一个数是否存在,注意,内存不足以容纳2.5亿个整数。解答:方法一:分治法对于大数据相关的算法题,分治法是一个非常好的方法。针对这一题来说,主要思为:可以根据实际可...博文来自:weixin_30258901的博客

  1.对查询进行优化,应尽量避免全表扫描,首先应考虑在 where 及 order by 涉及的列上建立索引。2.应尽量避免在 where 子句中对字段进行 null 值判断,否则将导致引擎放弃使用索引...博文来自:一个人的博客

  大数据量查询,对数据库者来说,性能问题往往是最需要的,借此总结自己优化此类问题的与大家分享,以免大家走更多的弯。1.使用主键临时表   大数据量表关联查询,是性能开销的主要原因。通过...博文来自:wga168的专栏

  几w条数据显示出来, 不适合用条形图, 改用拆线图 实际不是全部显示,而是跳着显示转载于:博文来自:weixin_30782331的博客

  从业五年多,辗转两个大厂,出过书,创过业,从技术小白成长为基层管理,联合几个业内大牛回答下这个问题,希望能帮到大家,记得帮我点赞哦。敲黑板!!!读了这篇文章,你将知道如何才能进大厂,如何实现财务,...博文来自:启舰

  子查询:子查询就是嵌套查询,一般我们在进行查询时,都是使用一个select命令,然后对这张表的结果进行一些后再查询,而子查询是允许在一个select语句中再使用一个select语句,第二个sele...博文来自:ZhangaZhaoLong的博客

  数据库设计方面:1、对查询进行优化,应尽量避免全表扫描,首先应考虑在 where 及 order by 涉及的列上建立索引。2、应尽量避免在 where子句中对字段进行 null值判断,否则将导致引擎...博文来自:huangyf008的博客

  编者按:本文作者奇舞团前端工程师魏川凯。A*搜索算法(A-star search algorithm)是一种常见且应用广泛的图搜索和寻径算法。A*搜索算法是通过使用启......博文来自:奇舞周刊

  转自:对查询进行优化,应尽量避免全表扫描,首先应考虑在 where 及 or...博文来自:c22231136的专栏

  约瑟夫环问题描述:编为 1-N 的 N 个士兵围坐在一起形成一个圆圈,从编为 1 的士兵开始依次(1,2,3…这样依次报),数到 m 的 士兵会被出列,之后的士兵再从 1 开始。直到最...博文来自:dreamispossible的博客

  钱唐信领大数据查询上线,内有积分系统,分销系统,朋友查询你得收益,提现秒到,目前刚上线,全国各地市场空白,有想法的宣传一下吧,挣钱的都是第一批人......博文来自:summer20180802的博客

  当时买c的初衷,只是想要个固态硬盘的笔记本,用来运行一些复杂的扑克软件。而看了当时所有的SSD笔记本后,最终决定,还是买个好(xiong)看(da)的。已经有好几个朋友问我mba怎么样了,所以今天...博文来自:Diana5253的博客

  前言机器学习中数据预处理阶段,首先要考虑的就是将数据集中的异常值找出来,然后再做额外处理。当然,异常值的处理并不存在什么银弹,只能具体情况具体再根据效果选择处理方法。直方图看看数据集直方图也许能看...博文来自:weixin_33895604的博客

  如果有一个特别大的访问量到数据库上时,往往查询速度会变得很慢,所以我们需要进行优化。优化从三个方面考虑:SQL语句优化、主从,读写分离,负载均衡、数据库分库分表。一、SQL查询语句优...博文来自:TigerChen

  前言:向啦,作为一个程序员,当然也有爱情啦。只不过,虽然前面两个程序都只是学习了基础的语法结构和向量哈希表。这里涉及的是Swing,awt图形用户界面和一点文件输入输出流的知识。&...博文来自:threecat.up的博客

  针对近期项目中遇到的大数据查询进行总结。这篇文章花费了我大量的时间,通过网上查找资料和自己的总结归纳,大数据怎么查如有不当,请大家:1.在大数据查询中要避免like模糊查询,在进行模糊查询时会进行多次全表遍历...博文来自:的博客

  中国麻将:世界上最早的区块链项目最近区块链这个玩意又被市场搞的很是火热,相信大部分人都不太清楚这玩意到底是怎么样的一个概念,它来了,它来了,它到底是啥~ 国家都开始发文支持了,下面是一个通俗易懂的例子...博文来自:gao_chun

  由于我之前一直强调数据结构以及算习的重要性,所以就有一些读者经常问我,数据结构与算法应该要学习到哪个程度呢?,说实话,这个问题我不知道要怎么回答你,主要取决于你想学习到哪些程度,不过针对这个问题,...博文来自:帅地

  大学四年,看课本是不可能一直看课本的了,对于学习,特别是自学,善于搜索网上的一些资源来辅助,还常有必要的,下面我就把这几年私藏的各种资源,网站贡献出来给你们。主要有:搜索、实用工具、在线视频...博文来自:帅地

原文标题:大数据怎么查大量大数据如何进行查询 网址:http://www.gunfollow.com/jiankangpindao/2020/0326/10723.html

Copyright © 2002-2020 脚踏实地新闻网 www.gunfollow.com 版权所有  

联系QQ:1352848661