• 关于 mysql大数据分页 的搜索结果

问题

MySQL分页性能问题Limit 性能问题求解决

蛮大人123 2019-12-01 19:49:19 1251 浏览量 回答数 1

问题

MySql执行分页时查询统计数据量的Sql语句差别及性能

吴孟桥 2019-12-01 20:00:45 1128 浏览量 回答数 1

问题

mysql多表查询分页如何实现最优

蛮大人123 2019-12-01 19:49:12 1835 浏览量 回答数 1

海外云虚拟主机包年25元/月起

海外独享虚拟主机全面上线,助力构建海外网站,提升公司国际形象;全球有效覆盖,超高性价比;建站入门首选,助力出口,适合跨境贸易企业。

问题

mysql下Mybatis一对多如何分页?

小旋风柴进 2019-12-01 20:15:47 2319 浏览量 回答数 1

问题

为什么在本地测试ajax反应很慢

我的中国 2019-12-01 19:40:31 1295 浏览量 回答数 1

回答

nosql比较宽泛,不同的数据库设计原则不同。比如mongoDB和redis都属于nosql,但是一个是文档型,一个是KV型,设计原则的区别特别大。mongoDB的设计原则还是比较靠近关系型数据库,它的collection和table比较类似,也是insert、remove、update、find这几个基本操作,可以参考关系型数据库来设计。但是它比关系型关系灵活。比如:一条微博可以插入9张图片,如果在MySQL中,可能这样设计:微博是一个table,图片信息是一个table,两只表做关联。或者这样设计:在微博那个table中加一个足够大的字符串类型的字段叫img_info,里面存放9张图片信息的json字符串。而在mongoDB中,天生就是支持上述的第二种设计的。记住,是天生支持,也是就天生对img_info里面内容crud操作都异常方便。然后回到你说的分页的问题:分页主要就是用到2个函数:limit和skip但是,数据量太大的时候,就不适合用skip分页了。《MongoDB权威指南》中给出的解决方案是:获取上一页的最后一条数据,然后使用gt和limit获取下一页的数据。关于redis的,@土豆2015 同学已经说的很详细了,就不累述了。提醒@土豆2015 一下,mongoDB是将部分数据做内存映射,最大化利用内存,持久化还是会保存在磁盘中的。如果没有持久化,把mongoDB重启一下,数据不就都没有了啊。就算是redis这样纯内存型数据库,也是有数据持久化的。

a123456678 2019-12-02 03:00:37 0 浏览量 回答数 0

问题

mysql分页,可以一次性获得数据和数据总数吗

吴孟桥 2019-12-01 20:03:55 1070 浏览量 回答数 1

问题

MYSQL使用(三)

云栖大讲堂 2019-12-01 21:47:19 938 浏览量 回答数 0

回答

这个问题,我理解您是害怕数据太多占用服务器更多的内存。不知道您使用的什么数据库,不过一般数据库都有类似mysql 的limit x, x 的方法。您可以把这些商品做成分页展示的,这样就可以避免数据过大造成内存暴涨的问题。另外,根据数据的访问特点,可以在数据库中增加额外的索引,加速这个查询过程。

卓刀 2019-12-02 00:45:47 0 浏览量 回答数 0

问题

mysql 使用limit分页分多少才会有性能问题?

蛮大人123 2019-12-01 19:53:06 1140 浏览量 回答数 1

问题

mysql limit分页一般查多少页,limit多少才会有性能问题?

a123456678 2019-12-01 20:16:23 1378 浏览量 回答数 1

问题

关于MySQL数据库查询优化的几个问题

我的中国 2019-12-01 19:40:34 1043 浏览量 回答数 1

问题

MySQL数据库高并发下文章的评论实现

蛮大人123 2019-12-01 19:51:55 1249 浏览量 回答数 2

回答

redis存储数据,然后mysql维护id,分页在mysql上做好,然后获取数据从redis中获取######回复 @紫梦幻 : 不好意思,我现在没有其他别的思路######但是数据是没有存到mysql的数据库中喔,那这个的话应该要怎么做?###### default PageBuilder paginate(int pageNumber) { if (pageNumber <= 0) { pageNumber = 1; } // 每页大小 int pageSize = Sys.PAGE_SIZE; // 总数据 int totalRow = this.zcard().intValue(); // 总页数 int totalPage = (int) (totalRow / pageSize); if (totalRow % pageSize != 0) { totalPage++; } if (pageNumber > totalPage) { pageNumber = totalPage; } PageBuilder builder = new PageBuilder(); builder.setPageNumber(pageNumber); builder.setPageSize(pageSize); builder.setTotalPage(totalPage); builder.setTotalRow(totalRow); int start = (pageNumber - 1) * pageSize; int end = pageNumber * pageSize - 1; Set<Object> ids = this.zrange(start, end); builder.setIds(ids); return builder; }  ######我给你发私信了!######回复 @紫梦幻 : 可以的######但是存list的时候,有两个参数不知道怎么写?能否加一下QQ呀?######回复 @紫梦幻 : 在来一个list结构,存放hash结构的key。 这个list主要就是用来做分页,list存放id。 分页得到的ids在去hash结构找数据。######存的是hash的结构,然后我可以把全部的读出来,但是在前端中就是分不了页、

kun坤 2020-06-07 13:36:38 0 浏览量 回答数 0

问题

数据迁移,分页从mysql查询出数据,插入ots数据不对?

初商 2019-12-01 19:49:50 4 浏览量 回答数 0

回答

堆溢出啊,这和JDBC查询没关系,主要是加载到内存的数据对象太多,导致。把JVM内存设置大些######除了这个方式,能否在代码上进行优化?###### 数据库是mysql? ######oracle###### 引用来自“爪哇老妖”的答案 堆溢出啊,这和JDBC查询没关系,主要是加载到内存的数据对象太多,导致。把JVM内存设置大些 可以啊,代码方面就控制住对象生成数量即可。不要一次生成太多对象。 ######嗯,主要是查询,我做成分页的方式来查,但是效率会比较低######分页,优化代码。######我目前就是采用这种方式,但是效率比较低######代码优化还是老调重弹吧,不要在循环里面做使用资源的事情###### 引用来自“爪哇老妖”的答案 引用来自“爪哇老妖”的答案 堆溢出啊,这和JDBC查询没关系,主要是加载到内存的数据对象太多,导致。把JVM内存设置大些 可以啊,代码方面就控制住对象生成数量即可。不要一次生成太多对象。 额  可以在数据库层面使用SQL分页 ######这个是肯定的,但是会导致效率比较低###### Java语言的意义就在于提醒你,不要写垃圾代码,注意控制好内存和性能。。 ######这些道理其实大家都懂,就像有个人跟你说我要解决温饱,但是你说党的优越性一样###### 引用来自“爪哇老妖”的答案 引用来自“爪哇老妖”的答案 引用来自“爪哇老妖”的答案 堆溢出啊,这和JDBC查询没关系,主要是加载到内存的数据对象太多,导致。把JVM内存设置大些 可以啊,代码方面就控制住对象生成数量即可。不要一次生成太多对象。 额  可以在数据库层面使用SQL分页 建索引,尽量使用索引查询,SQL优化,拆表等一些列优化措施都用上,实在不行做数据缓存,ehcache等

爱吃鱼的程序员 2020-06-03 20:46:11 0 浏览量 回答数 0

问题

[@徐雷frank][¥20]通过开始时间、结束时间、页码为参数调用接口去拉取数据,每页固定大小200size,当你拉取到第一页数据时,其中第50条数据更新了时间,那么这条数据会跑到这个时间段后面去,导致第二页数据的第一条会跑到第一页(MySQL分页的原因),接着你去拉第二页数据的时候这条数据就永远的漏了,请问在不改变接口的情况下,应用端有什么好的技术方案可以避免这种情况的发生?

李博 bluemind 2019-12-01 19:24:44 693 浏览量 回答数 1

回答

Mysql 在做分页带Limit查询的时候,越往后面,效率越低,我说下我自己的做法,一般主键ID都为自增的,且带where条件数据不可能完全都是所要得到的数据。 举个例子 有一张表 we_user_score 存积分的表uid(_pk) username(用户名) score(积分) 假设有100条数据 其中积分分布为10-100这个区间。这个时候,想要获取score>30的数据 每页5条 select uid,username,score from we_user_score where score>30 limit 0,5; 但是在做第二页查询的时候 sql就可以这么写 select uid,username,score from we_user_score where uid>=5 and score>30 limit 5,5; 依次类推,这样在大数据量的情况下,速度会提升的比较明显。

落地花开啦 2019-12-02 02:45:10 0 浏览量 回答数 0

回答

解决了吗?感觉是版本的问题 ######请问楼主解决了吗?我现在也遇到了相同的问题######这个是由于当时IK分词器还不支持solr5.3版本。现在百度已经能找到solr5.3版本下的ik分词器代码了。######https://github.com/EugenePig/ik-analyzer-solr5   下载这个 然后直接编译 按照reademe 的说明配置即可######基于微博数据检测的Solr实战开发 课程观看地址: http://www.xuetuwuyou.com/course/145 课程出自学途无忧网: http://www.xuetuwuyou.com solrcloud5.2.1+zookeeper一部精通 课程观看地址: http://www.xuetuwuyou.com/course/15 一、课程用到的软件 1.centos6.7 2.apache-tomcat-7.0.47 3.solr-5.5 4.zookeeper 3.4.6 5.eclipse-jee-neon-R-win32-x86_64  二、课程目标 在海量数据的情况下,传统的关系型数据库已经力不从心,快速检索已经成为了应用系统所必备的功能之一。本课程从实战角度出发,让学员能从实战中学习到: 搜索引擎的原理及架构。  掌握在大数据环境下经典检索算法。  掌握如何使用solr实现系统快速检索目标。  掌握solr在开发中常见的技术大坑与调优技术。 三、适用人群 开发人员、架构师、对分布式搜索引擎有兴趣的朋友。 四、课程内容介绍: 第1课、Solr简介与部署     知识点:Solr基本概念以及应用的介绍、Solr单机版的搭建 第2课、Solr建库实战     知识点:介绍managed-schame和solrConfig两大配置文件,并建立Solr库开始实操 第3课、Solr中文分词器与全量数据导入     知识点:对比中文分词器IK与MMSeg4j的特点、Solr配置MMSeg4j中文分词器、把Mysql中的数据导入到Solr索引库上 第4课、Solr增量数据导入及新管理UI实战     知识点:把Mysql的数据增量导入到Solr索引库上、对Solr5最新的UI进行全面介绍 第5课、Solr数据查询详解     知识点:基于UI管理界面,实战Solr q查询、fq查询以及分页、高亮、Facet等高级特性的使用 第6课、Solrj编程实战之索引增删改     知识点:基于Eclipse开发环境、搭建Solrj工程项目,对Solr的索引库的进行增、删、改的操作 第7课、Solrj编程实战之索引查询与分页     知识点:基于Solrj实现q查询、fq查询以及分页查询的操作 第8课、Solrj编程实战之高亮与Facet     知识点:基于Solrj实现高亮查询、Facet查询的操作 第9课、Solrj编程实战之设计模式     知识点:基于前阶段所写的代码,发现代码中的不足,并使用单例模式、模块方法、回调方法的设计模式进行仿Spring Data的开发 第10课、Solr缓存与预热机制剖析     知识点:从算法、应用场景以及实例的多个维度,剖析Solr中的四大缓存,并且站在SolrIndexSearcher的生命周期上解剖预热机制及其注意事项 第11课、Solr高级特性之近实时、实时检索     知识点:从概念、原理以及实例的多个维度,剖析Solr近实时、实时检索 第12课、Solr高级特性之原子更新     知识点:Solr在应用层面上对Lucene进行了封装,在Solr4之后提出了原子更新的新概念,从此在应用层面操作上方便我们进行索引更新 第13课、Solr高级特性之深度分页及性能调优     知识点:Solr4的又一大特性,在面临海量据的情况下,占用更低的资源进行数据检索正是深度分页的一大亮点、后半节结合讲师的实际开发经验,分享Solr性能调优的策略 第14课、SolrCloud部署运维之集群搭建     知识点:基于Centos、zookeeper环境下,搭建SolrCloud系统  第15课、SolrCloud部署运维之库管理     知识点:SolrCloud的运维之道,从UI管理界面以及命令行的两个维度去剖析SolrCloud库的管理,包括库的新增、删除以及动态更新  第16课、SolrCloud部署运维之副本与扩容     知识点:SolrCloud的运维之道,从UI管理界面以及命令行的两个维度去剖析SolrCloud分片的管理,包括分片的备份与库的扩容 第17课、中文分词器配置与使用Solrj操作SolrCloud     知识点:配置中文分词器以及使用Solrj操作SolrCloud来实现增、删、改、查  第18课、项目介绍与环境搭建     知识点:介绍项目的背景以及总体架构、突出Solr在实际项目中的角色。基于Maven搭建开发环境  第19课、框架代码开发之Spring集成Solrj之CRUD(maven版)     知识点:Spring是一个JavaEE企业级框架,它很多主流的主件都进行集成支持。本节学习Spring与Solrj的集成,进行增、删、改、查操作 第20课、框架代码开发之Spring集成Solrj之(maven版)     知识点:Spring是一个JavaEE企业级框架,它对很多主流的组件都进行集成支持。本节学习Spring与Solrj的集成,进行实时检索、高亮、深度分页、Facet查询操作 第21课、基于dom4j的导库组件开发(maven版)     知识点:基于dom4j解析XML文件,并将数据批量高效导入到SolrCloud分布式索引库上进行检索分析 第22课、高级检索组件开发一     知识点:基于SolrCloud实现高级检索,包括多条件查询、高亮、分页操作 第23课、高级检索组件开发二         知识点:基于SolrCloud实现高级检索,包括多条件查询、高亮、分页操作 第24课、相似匹配组件开发一     知识点:基于SolrCloud实现相似性检索操作 第25课、相似匹配组件开发二     知识点:基于SolrCloud实现相似性检索操作 第26课、课程总结与Solr6的展望     知识点:课程大总结,并对最新版的Solr6进行亮点分析以及未来的展望

kun坤 2020-06-01 09:57:39 0 浏览量 回答数 0

问题

如何使用mongodb设计评论、回复这类表

茶什i 2019-12-01 19:52:13 13 浏览量 回答数 1

回答

请在my.cnf下配置 [mysqld]max_allowed_packet=100M 重启mysql 回复 @码上中国博客:将my.default.init复制重命名为my.init,再修改,最后重启下mysql回复 @码上中国博客:这个要自己创建的5.7的MySQL没有这个init文件,只有my.default.init我修改了这个init文件后重启,不管用,再次查看那个值得大小还是不变,按照网上的命令执行后重启了还是不行另外数据库最好不要存储blob、txt之类的大字段,查询分页不是只有blob大对象会有这种问题吗,怎么text也有这种问题了,我用了一个longtext还pgsql吧。一劳永逸用pg管理爬取到的大量网页、图片、pdf毫无压力回复 @554330833a:不是mysql不可以,感觉应该是它不是为这类场景设计的,默认设置比较保守吧。为什么pg可以mysql不可以呢 引用来自“mark35”的评论还pgsql吧。一劳永逸有时是程序设计问题(不适合的场景),后时候是配置问题,虽然基本都能解决,但mysql这些需要耗费时间精力成本的小问题太多。不如要么上商业db要么上免费的pgsql,彻底没这些细节魔鬼 楼主是通过setglobal语句改的max_allowed_packet?然后又用了连接池吧。 另外对于mysql的配置文件,使用命令mysql--help看他的配置文件加载顺序,选其中一个(没有就创建)即可。

爱吃鱼的程序员 2020-06-09 15:46:22 0 浏览量 回答数 0

回答

SQL 写个分页,前10000条 直接导入。后10000条通过增量导。 ######@java_大猫 我找到解决方法了,只要主键不一样,就是新增,谢谢你了######回复 @tflyy14 : 他有增量的配置。但是 增量 的前提 是 你数据的 update 时间必须大雨 你第一次 导入的 时间。######我就是想知道如何增量呢######为什么不用solr的mysql呢,我的200万的数据没多久就完事了,不需要写程序的啊######你200万的数据是一次性导出来的吗,为什么我10万条的数据(有一个大字段)导出来时,报内存溢出呢,求指教######因为每一条数据对应了一个本地文件,都要进行索引,所以不能用dataimport功能

kun坤 2020-06-07 14:23:00 0 浏览量 回答数 0

问题

SQL语句中 SQL_CALC_FOUND_ROWS 的使用与否

蛮大人123 2019-12-01 19:52:09 2379 浏览量 回答数 1

问题

RDS中Mysql搜索count,该如何优化,求助

fwtek 2019-12-01 21:04:59 3719 浏览量 回答数 1

回答

我记得mysql取结果集的时候有2种方式,一个是直接把所有记录都读取出来,一个是对查询结果一条条的读取。 不知道你用的是不是mysql_系列函数,如果是的话,可以试试用mysql_unbuffered_query代替mysql_query,其它的api也有类似机制。 ######回复 @__然__ : 好吧 解决问题就行 开始思路没对 别喷我######我知道为什么PHP不能处理这么大的数据,但是我没有一个好的办法来解决,谢谢你提供的API,经过这次教训之后,就不会在犯这个错误了。###### 是PHP挂掉了还是数据库挂掉了, 如果是PHP挂掉了,可以检查一下php的memory_limit配置了多大,512M? ######是PHP挂掉了,mysql没事, 分配给PHP 512M的内存######time_limit 设为 0######不是程序超时引起的,######加limit分页读...######回复 @__然__ : 不加的话死定了######就是不想加limit,######没有这样玩的,亲###### @松下裤腰带 我拒绝这样玩,啥变态的需求,这样很容易内存溢出,######回复 @__然__ : 你要这样玩,当然会遇到问题赛######我就这么玩了,所以遇到这样的问题。###### 1、2楼还教他设置……哪有这样玩的。你说说你是什么应用、用处吧。 ######跑数据,我已经解决了这个问题了。 但是还是想知道为什么会有这种情况###### 引用来自“喂马”的答案 是PHP挂掉了还是数据库挂掉了, 如果是PHP挂掉了,可以检查一下php的memory_limit配置了多大,512M? 那你的php 错误日志里估计有类似于下面的记录: PHP Fatal error:  Allowed memory size of xxxxxx bytes .... ######我的错误全开的,除了提示######出这个需求的人一定是个脑残.######这。。。脑袋被门夹了啊######为什么要用php读,直接把库导出来不就行了

kun坤 2020-06-08 11:19:40 0 浏览量 回答数 0

回答

你的JDK是错的把,直接用的Eclipse自带的,你换一下试试回复<aclass='referer'target='_blank'>@朋也:Causedby:java.lang.NoSuchMethodError:org.apache.commons.codec.binary.Base64.<init>(I)V这个报错通常是使用的ECLIPSE自带的JDK导致的,应该重新配置成自己的JDK。回复<aclass='referer'target='_blank'>@首席撸出血:配置了的,是jdk1.8,开发工具是idea或者你本地的JDK环境有没有配置缺jar包啊,<spanstyle="color:#444444;font-family:'MicrosoftYaHei',Verdana,sans-serif,宋体;font-size:14px;line-height:normal;background-color:#FFFFFF;">apache.commons.codec这个包估计所使用的jar版本过低了;如果有多个,可删除低版本的试试这个包有的Base64是commons-codec1.0才加入的类,确认下本地的版本是不是不对,另外也确认下是不是存在两个不同版本的jar包冲突<divclass='ref'> 引用来自“逝水fox”的评论Base64是commons-codec1.0才加入的类,确认下本地的版本是不是不对,另外也确认下是不是存在两个不同版本的jar包冲突 基于微博数据检测的Solr实战开发 课程观看地址:<atarget="_blank"rel="nofollow">http://www.xuetuwuyou.com/course/145 课程出自学途无忧网:<atarget="_blank"rel="nofollow">http://www.xuetuwuyou.com solrcloud5.2.1+zookeeper一部精通 课程观看地址:<atarget="_blank"rel="nofollow">http://www.xuetuwuyou.com/course/15 一、课程用到的软件 1.centos6.7 2.apache-tomcat-7.0.47 3.solr-5.5 4.zookeeper3.4.6 5.eclipse-jee-neon-R-win32-x86_64  二、课程目标 在海量数据的情况下,传统的关系型数据库已经力不从心,快速检索已经成为了应用系统所必备的功能之一。本课程从实战角度出发,让学员能从实战中学习到: 1.搜索引擎的原理及架构。  2.掌握在大数据环境下经典检索算法。  3.掌握如何使用solr实现系统快速检索目标。  4.掌握solr在开发中常见的技术大坑与调优技术。 三、适用人群 开发人员、架构师、对分布式搜索引擎有兴趣的朋友。 四、课程内容介绍: 第1课、Solr简介与部署   知识点:Solr基本概念以及应用的介绍、Solr单机版的搭建 第2课、Solr建库实战   知识点:介绍managed-schame和solrConfig两大配置文件,并建立Solr库开始实操 第3课、Solr中文分词器与全量数据导入   知识点:对比中文分词器IK与MMSeg4j的特点、Solr配置MMSeg4j中文分词器、把Mysql中的数据导入到Solr索引库上 第4课、Solr增量数据导入及新管理UI实战   知识点:把Mysql的数据增量导入到Solr索引库上、对Solr5最新的UI进行全面介绍 第5课、Solr数据查询详解   知识点:基于UI管理界面,实战Solrq查询、fq查询以及分页、高亮、Facet等高级特性的使用 第6课、Solrj编程实战之索引增删改   知识点:基于Eclipse开发环境、搭建Solrj工程项目,对Solr的索引库的进行增、删、改的操作 第7课、Solrj编程实战之索引查询与分页   知识点:基于Solrj实现q查询、fq查询以及分页查询的操作 第8课、Solrj编程实战之高亮与Facet   知识点:基于Solrj实现高亮查询、Facet查询的操作 第9课、Solrj编程实战之设计模式   知识点:基于前阶段所写的代码,发现代码中的不足,并使用单例模式、模块方法、回调方法的设计模式进行仿SpringData的开发 第10课、Solr缓存与预热机制剖析   知识点:从算法、应用场景以及实例的多个维度,剖析Solr中的四大缓存,并且站在SolrIndexSearcher的生命周期上解剖预热机制及其注意事项 第11课、Solr高级特性之近实时、实时检索   知识点:从概念、原理以及实例的多个维度,剖析Solr近实时、实时检索 第12课、Solr高级特性之原子更新   知识点:Solr在应用层面上对Lucene进行了封装,在Solr4之后提出了原子更新的新概念,从此在应用层面操作上方便我们进行索引更新 第13课、Solr高级特性之深度分页及性能调优   知识点:Solr4的又一大特性,在面临海量据的情况下,占用更低的资源进行数据检索正是深度分页的一大亮点、后半节结合讲师的实际开发经验,分享Solr性能调优的策略 第14课、SolrCloud部署运维之集群搭建   知识点:基于Centos、zookeeper环境下,搭建SolrCloud系统  第15课、SolrCloud部署运维之库管理   知识点:SolrCloud的运维之道,从UI管理界面以及命令行的两个维度去剖析SolrCloud库的管理,包括库的新增、删除以及动态更新  第16课、SolrCloud部署运维之副本与扩容   知识点:SolrCloud的运维之道,从UI管理界面以及命令行的两个维度去剖析SolrCloud分片的管理,包括分片的备份与库的扩容 第17课、中文分词器配置与使用Solrj操作SolrCloud   知识点:配置中文分词器以及使用Solrj操作SolrCloud来实现增、删、改、查  第18课、项目介绍与环境搭建   知识点:介绍项目的背景以及总体架构、突出Solr在实际项目中的角色。基于Maven搭建开发环境  第19课、框架代码开发之Spring集成Solrj之CRUD(maven版)   知识点:Spring是一个JavaEE企业级框架,它很多主流的主件都进行集成支持。本节学习Spring与Solrj的集成,进行增、删、改、查操作 第20课、框架代码开发之Spring集成Solrj之(maven版)   知识点:Spring是一个JavaEE企业级框架,它对很多主流的组件都进行集成支持。本节学习Spring与Solrj的集成,进行实时检索、高亮、深度分页、Facet查询操作 第21课、基于dom4j的导库组件开发(maven版)   知识点:基于dom4j解析XML文件,并将数据批量高效导入到SolrCloud分布式索引库上进行检索分析 第22课、高级检索组件开发一   知识点:基于SolrCloud实现高级检索,包括多条件查询、高亮、分页操作 第23课、高级检索组件开发二     知识点:基于SolrCloud实现高级检索,包括多条件查询、高亮、分页操作 第24课、相似匹配组件开发一   知识点:基于SolrCloud实现相似性检索操作 第25课、相似匹配组件开发二   知识点:基于SolrCloud实现相似性检索操作 第26课、课程总结与Solr6的展望   知识点:课程大总结,并对最新版的Solr6进行亮点分析以及未来的展望

爱吃鱼的程序员 2020-06-12 15:21:44 0 浏览量 回答数 0

回答

回14楼tanrunhua的帖子 都是牛人大神啊,我有个疑问关于分页优化经过我自己本地测试,数据表中有1200万条数据根据子查询这种分页办法并没有起到太大的效果, 如果是主键id都是有序的话  select  *  from t where sellerid=100 AND id > 100000 -1 limit  20 这种情况0.0n就可以响应。 比哥(Q8):分页该怎么优化才行??? select  *  from t where sellerid=100 limit 100000,20   普通limit M,N的翻页写法,往往在越往后翻页的过程中速度越慢,原因   mysql会读取表中的前M+N条数据,M越大,性能就越差:   优化写法:   select t1.* from  t t1,               (select id from t  sellerid=100 limit 100000,20) t2   where t1.id=t2.id;   优化后的翻页写法,先查询翻页中需要的N条数据的主键id,在根据主键id   回表查询所需要的N条数据,此过程中查询N条数据的主键ID在索引中完成   注意:需要在t表的sellerid字段上创建索引   create index ind_sellerid on t(sellerid);   案例:   ------------------------- Re干货分享:DBA专家门诊一期:索引与sql优化问题汇总 赚云币抽奖,嘿嘿~ ------------------------- Re干货分享:DBA专家门诊一期:索引与sql优化问题汇总 赚云币抽奖,嘿嘿~ ------------------------- Re干货分享:DBA专家门诊一期:索引与sql优化问题汇总 赚云币抽奖,嘿嘿~ ------------------------- Re干货分享:DBA专家门诊一期:索引与sql优化问题汇总 赚云币抽奖,嘿嘿~ ------------------------- Re干货分享:DBA专家门诊一期:索引与sql优化问题汇总 赚云币抽奖,嘿嘿~

zhoujinghuan 2019-12-02 01:20:18 0 浏览量 回答数 0

问题

【精品问答】初级程序员必备2020最新MYSQL面试题

问问小秘 2020-03-31 13:32:17 1670 浏览量 回答数 1

回答

第一次看这么多文字竟然读完了,看来我还是喜欢技术上的干货 ------------------------- 比哥(Q8):分页该怎么优化才行??? 玄惭(A8):可以参考这个链接,里面有很多的最佳实践,其中就包括了分页语句的优化: http://bbs.aliyun.com/read/168647.html 普通写法: select  *  from t where sellerid=100 limit 100000,20 普通limit M,N的翻页写法,往往在越往后翻页的过程中速度越慢,原因 mysql会读取表中的前M+N条数据,M越大,性能就越差: 优化写法: select t1.* from  t t1,             (select id from t  sellerid=100 limit 100000,20) t2 where t1.id=t2.id; 我标红变粗的地方是不是少了一个 where

啊里新人 2019-12-02 01:20:16 0 浏览量 回答数 0

回答

索引,索引!!!为经常查询的字段建索引!! 但也不能过多地建索引。insert和delete等改变表记录的操作会导致索引重排,增加数据库负担。优化目标1.减少 IO 次数 IO永远是数据库最容易瓶颈的地方,这是由数据库的职责所决定的,大部分数据库操作中超过90%的时间都是 IO 操作所占用的,减少 IO 次数是 SQL 优化中需要第一优先考虑,当然,也是收效最明显的优化手段。2.降低 CPU 计算 除了 IO 瓶颈之外,SQL优化中需要考虑的就是 CPU 运算量的优化了。order by, group by,distinct … 都是消耗 CPU 的大户(这些操作基本上都是 CPU 处理内存中的数据比较运算)。当我们的 IO 优化做到一定阶段之后,降低 CPU 计算也就成为了我们 SQL 优化的重要目标优化方法改变 SQL 执行计划 明确了优化目标之后,我们需要确定达到我们目标的方法。对于 SQL 语句来说,达到上述2个目标的方法其实只有一个,那就是改变 SQL 的执行计划,让他尽量“少走弯路”,尽量通过各种“捷径”来找到我们需要的数据,以达到 “减少 IO 次数” 和 “降低 CPU 计算” 的目标分析复杂的SQL语句explain 例如: mysql> explain select from (select from ( select * from t3 where id=3952602) a) b; id select_type table type possible_keys key key_len ref rows Extra 1 PRIMARY system NULL NULL NULL NULL 1 2 DERIVED system NULL NULL NULL NULL 1 3 DERIVED t3 const PRIMARY,idx_t3_id PRIMARY 4 1 很显然这条SQL是从里向外的执行,就是从id=3 向上执行.show show tables或show tables from database_name; // 显示当前数据库中所有表的名称 show databases; // 显示mysql中所有数据库的名称 show columns from table_name from database_name; 或MySQL show columns from database_name.table_name; // 显示表中列名称 show grants for user_name@localhost; // 显示一个用户的权限,显示结果类似于grant 命令 show index from table_name; // 显示表的索引 show status; // 显示一些系统特定资源的信息,例如,正在运行的线程数量 show variables; // 显示系统变量的名称和值show processlist; // 显示系统中正在运行的所有进程,也就是当前正在执行的查询。 show table status; // 显示当前使用或者指定的database中的每个表的信息。信息包括表类型和表的最新更新时间 show privileges; // 显示服务器所支持的不同权限 show create database database_name; // 显示create database 语句是否能够创建指定的数据库 show create table table_name; // 显示create database 语句是否能够创建指定的数据库 show engies; // 显示安装以后可用的存储引擎和默认引擎。 show innodb status; // 显示innoDB存储引擎的状态 show logs; // 显示BDB存储引擎的日志 show warnings; // 显示最后一个执行的语句所产生的错误、警告和通知 show errors; // 只显示最后一个执行语句所产生的错误关于enum 存在争议。 对于取值有限且固定的字段,推荐使用enum而非varchar。但是!!其他数据库可能不支持,导致了难于迁移的问题。开启缓存查询 对于完全相同的sql,使用已经存在的执行计划,从而跳过解析和生成执行计划的过程。 应用场景:有一个不经常变更的表,且服务器收到该表的大量相同查询。对于频繁更新的表,查询缓存是不适合的 Mysql 判断是否命中缓存的办法很简单,首先会将要缓存的结果放在引用表中,然后使用查询语句,数据库名称,客户端协议的版本等因素算出一个hash值,这个hash值与引用表中的结果相关联。如果在执行查询时,根据一些相关的条件算出的hash值能与引用表中的数据相关联,则表示查询命中 查询必须是完全相同的(逐字节相同)才能够被认为是相同的。另外,同样的查询字符串由于其它原因可能认为是不同的。使用不同的数据库、不同的协议版本或者不同 默认字符集的查询被认为是不同的查询并且分别进行缓存。 下面sql查询缓存认为是不同的: SELECT * FROM tbl_name Select * from tbl_name 缓存机制失效的场景 如果查询语句中包含一些不确定因素时(例如包含 函数Current()),该查询不会被缓存,不确定因素主要包含以下情况 · 引用了一些返回值不确定的函数 · 引用自定义函数(UDFs)。 · 引用自定义变量。 · 引用mysql系统数据库中的表。 · 下面方式中的任何一种: SELECT ...IN SHARE MODE SELECT ...FOR UPDATE SELECT ...INTO OUTFILE ... SELECT ...INTO DUMPFILE ... SELECT * FROM ...WHERE autoincrement_col IS NULL · 使用TEMPORARY表。 · 不使用任何表。 · 用户有某个表的列级别权限。额外的消耗 如果使用查询缓存,在进行读写操作时会带来额外的资源消耗,消耗主要体现在以下几个方面 · 查询的时候会检查是否命中缓存,这个消耗相对较小 · 如果没有命中查询缓存,MYSQL会判断该查询是否可以被缓存,而且系统中还没有对应的缓存,则会将其结果写入查询缓存 · 如果一个表被更改了,那么使用那个表的所有缓冲查询将不再有效,并且从缓冲区中移出。这包括那些映射到改变了的表的使用MERGE表的查询。一个表可以被许多类型的语句更改,例如INSERT、UPDATE、DELETE、TRUNCATE、ALTER TABLE、DROP TABLE或DROP DATABASE。 对于InnoDB而言,事物的一些特性还会限制查询缓存的使用。当在事物A中修改了B表时,因为在事物提交之前,对B表的修改对其他的事物而言是不可见的。为了保证缓存结果的正确性,InnoDB采取的措施让所有涉及到该B表的查询在事物A提交之前是不可缓存的。如果A事物长时间运行,会严重影响查询缓存的命中率 查询缓存的空间不要设置的太大。 因为查询缓存是靠一个全局锁操作保护的,如果查询缓存配置的内存比较大且里面存放了大量的查询结果,当查询缓存失效的时候,会长时间的持有这个全局锁。因为查询缓存的命中检测操作以及缓存失效检测也都依赖这个全局锁,所以可能会导致系统僵死的情况静态表速度更快定长类型和变长类型 CHAR(M)定义的列的长度为固定的,M取值可以为0~255之间,当保存CHAR值时,在它们的右边填充空格以达到指定的长度。当检索到CHAR值时,尾部的空格被删除掉。在存储或检索过程中不进行大小写转换。CHAR存储定长数据很方便,CHAR字段上的索引效率级高,比如定义char(10),那么不论你存储的数据是否达到了10个字节,都要占去10个字节的空间,不足的自动用空格填充。 VARCHAR(M)定义的列的长度为可变长字符串,M取值可以为0~65535之间,(VARCHAR的最大有效长度由最大行大小和使用的字符集确定。整体最大长度是65,532字节)。VARCHAR值保存时只保存需要的字符数,另加一个字节来记录长度(如果列声明的长度超过255,则使用两个字节)。VARCHAR值保存时不进行填充。当值保存和检索时尾部的空格仍保留,符合标准SQL。varchar存储变长数据,但存储效率没有CHAR高。 如果一个字段可能的值是不固定长度的,我们只知道它不可能超过10个字符,把它定义为 VARCHAR(10)是最合算的。VARCHAR类型的实际长度是它的值的实际长度+1。空间上考虑,用varchar合适;从效率上考虑,用char合适,关键是根据实际情况找到权衡点。VARCHAR和TEXT、BlOB类型 VARCHAR,BLOB和TEXT类型是变长类型,对于其存储需求取决于列值的实际长度(在前面的表格中用L表示),而不是取决于类型的最大可能尺寸。 BLOB和TEXT类型需要1,2,3或4个字节来记录列值的长度,这取决于类型的最大可能长度。VARCHAR需要定义大小,有65535字节的最大限制;TEXT则不需要。如果你把一个超过列类型最大长度的值赋给一个BLOB或TEXT列,值被截断以适合它。 一个BLOB是一个能保存可变数量的数据的二进制的大对象。4个BLOB类型TINYBLOB、BLOB、MEDIUMBLOB和LONGBLOB仅仅在他们能保存值的最大长度方面有所不同。 BLOB 可以储存图片,TEXT不行,TEXT只能储存纯文本文件。 在BLOB和TEXT类型之间的唯一差别是对BLOB值的排序和比较以大小写敏感方式执行,而对TEXT值是大小写不敏感的。换句话说,一个TEXT是一个大小写不敏感的BLOB。 效率来说基本是char>varchar>text,但是如果使用的是Innodb引擎的话,推荐使用varchar代替char char和varchar可以有默认值,text不能指定默认值静态表和动态表 静态表字段长度固定,自动填充,读写速度很快,便于缓存和修复,但比较占硬盘,动态表是字段长度不固定,节省硬盘,但更复杂,容易产生碎片,速度慢,出问题后不容易重建。当只需要一条数据的时候,使用limit 1 表记录中的一行尽量不要超过一个IO单元 区分in和exist select * from 表A where id in (select id from 表B)这句相当于select from 表A where exists(select from 表B where 表B.id=表A.id)对于表A的每一条数据,都执行select * from 表B where 表B.id=表A.id的存在性判断,如果表B中存在表A当前行相同的id,则exists为真,该行显示,否则不显示 区分in和exists主要是造成了驱动顺序的改变(这是性能变化的关键),如果是exists,那么以外层表为驱动表,先被访问,如果是IN,那么先执行子查询。 所以IN适合于外表大而内表小的情况;EXISTS适合于外表小而内表大的情况复杂多表尽量少用join MySQL 的优势在于简单,但这在某些方面其实也是其劣势。MySQL 优化器效率高,但是由于其统计信息的量有限,优化器工作过程出现偏差的可能性也就更多。对于复杂的多表 Join,一方面由于其优化器受限,再者在 Join 这方面所下的功夫还不够,所以性能表现离 Oracle 等关系型数据库前辈还是有一定距离。但如果是简单的单表查询,这一差距就会极小甚至在有些场景下要优于这些数据库前辈。尽量用join代替子查询 虽然 Join 性能并不佳,但是和 MySQL 的子查询比起来还是有非常大的性能优势。 MySQL需要为内层查询语句的查询结果建立一个临时表。然后外层查询语句在临时表中查询记录。查询完毕后,MySQL需要插销这些临时表。所以在MySQL中可以使用连接查询来代替子查询。连接查询不需要建立临时表,其速度比子查询要快。尽量少排序 排序操作会消耗较多的 CPU 资源,所以减少排序可以在缓存命中率高等 IO 能力足够的场景下会较大影响 SQL 的响应时间。 对于MySQL来说,减少排序有多种办法,比如: 上面误区中提到的通过利用索引来排序的方式进行优化 减少参与排序的记录条数 非必要不对数据进行排序尽量避免select * 大多数关系型数据库都是按照行(row)的方式存储,而数据存取操作都是以一个固定大小的IO单元(被称作 block 或者 page)为单位,一般为4KB,8KB… 大多数时候,每个IO单元中存储了多行,每行都是存储了该行的所有字段(lob等特殊类型字段除外)。 所以,我们是取一个字段还是多个字段,实际上数据库在表中需要访问的数据量其实是一样的。 也有例外情况,那就是我们的这个查询在索引中就可以完成,也就是说当只取 a,b两个字段的时候,不需要回表,而c这个字段不在使用的索引中,需要回表取得其数据。在这样的情况下,二者的IO量会有较大差异。尽量少or 当 where 子句中存在多个条件以“或”并存的时候,MySQL 的优化器并没有很好的解决其执行计划优化问题,再加上 MySQL 特有的 SQL 与 Storage 分层架构方式,造成了其性能比较低下,很多时候使用 union all 或者是union(必要的时候)的方式来代替“or”会得到更好的效果。尽量用 union all 代替 union union 和 union all 的差异主要是前者需要将两个(或者多个)结果集合并后再进行唯一性过滤操作,这就会涉及到排序,增加大量的 CPU 运算,加大资源消耗及延迟。所以当我们可以确认不可能出现重复结果集或者不在乎重复结果集的时候,尽量使用 union all 而不是 union。尽量早过滤 在 SQL 编写中同样可以使用这一原则来优化一些 Join 的 SQL。比如我们在多个表进行分页数据查询的时候,我们最好是能够在一个表上先过滤好数据分好页,然后再用分好页的结果集与另外的表 Join,这样可以尽可能多的减少不必要的 IO 操作,大大节省 IO 操作所消耗的时间。避免类型转换 这里所说的“类型转换”是指 where 子句中出现 column 字段的类型和传入的参数类型不一致的时候发生的类型转换: 人为在column_name 上通过转换函数进行转换直接导致 MySQL(实际上其他数据库也会有同样的问题)无法使用索引,如果非要转换,应该在传入的参数上进行转换,由数据库自己进行转换, 如果我们传入的数据类型和字段类型不一致,同时我们又没有做任何类型转换处理,MySQL 可能会自己对我们的数据进行类型转换操作,也可能不进行处理而交由存储引擎去处理,这样一来,就会出现索引无法使用的情况而造成执行计划问题。优先优化高并发的 SQL,而不是执行频率低某些“大”SQL 对于破坏性来说,高并发的 SQL 总是会比低频率的来得大,因为高并发的 SQL 一旦出现问题,甚至不会给我们任何喘息的机会就会将系统压跨。而对于一些虽然需要消耗大量 IO 而且响应很慢的 SQL,由于频率低,即使遇到,最多就是让整个系统响应慢一点,但至少可能撑一会儿,让我们有缓冲的机会。从全局出发优化,而不是片面调整 尤其是在通过调整索引优化 SQL 的执行计划的时候,千万不能顾此失彼,因小失大。尽可能对每一条运行在数据库中的SQL进行 explain 知道 SQL 的执行计划才能判断是否有优化余地,才能判断是否存在执行计划问题。在对数据库中运行的 SQL 进行了一段时间的优化之后,很明显的问题 SQL 可能已经很少了,大多都需要去发掘,这时候就需要进行大量的 explain 操作收集执行计划,并判断是否需要进行优化。尽量避免where子句中对字段进行null值的判断 会导致引擎放弃索引,进而进行全表扫描。 尽量不要给数据库留null值,尽可能地使用not null填充数据库。可以为每个null型的字段设置一个和null对应的实际内容表述。避免在where中使用!=, >, <操作符 否则引擎放弃使用索引,进行全表扫描。常用查询字段建索引避免在where中使用or imagein和not in关键词慎用,容易导致全表扫面 对连续的数值尽量用between通配符查询也容易导致全表扫描避免在where子句中使用局部变量 sql只有在运行时才解析局部变量。而优化程序必须在编译时访问执行计划,这时并不知道变量值,所以无法作为索引的输入项。 image避免在where子句中对字段进行表达式操作 会导致引擎放弃使用索引 image避免在where子句中对字段进行函数操作 image不要where子句的‘=’左边进行函数、算术运算或其他表达式运算 系统可能无法正确使用索引避免update全部字段 只update需要的字段。频繁调用会引起明显的性能消耗,同时带来大量日志。索引不是越多越好 一个表的索引数最好不要超过6个尽量使用数字型字段而非字符型 因为处理查询和连接时会逐个比较字符串的每个字符,而对于数字型而言只需要比较一次就够了。尽可能用varchar/nvarchar代替char/nchar 变长字段存储空间小,对于查询来说,在一个相对较小的字段内搜索效率更高。。。?避免频繁创建和删除临时表,减少系统表资源消耗select into和create table 新建临时表时,如果一次性插入数据量很大,使用select into代替create table,避免造成大量log,以提高速度。 如果数据量不大,为了缓和系统表的资源,先create table,再insert。 拆分大的DELETE和INSERT语句 因为这两个操作是会锁表的,对于高访问量的站点来说,锁表时间内积累的访问数、数据库连接、打开的文件数等等,可能不仅仅让WEB服务崩溃,还会让整台服务器马上挂了。 所以,一定要拆分,使用LIMIT条件休眠一段时间,批量处理。

wangccsy 2019-12-02 01:50:30 0 浏览量 回答数 0
阿里云大学 云服务器ECS com域名 网站域名whois查询 开发者平台 小程序定制 小程序开发 国内短信套餐包 开发者技术与产品 云数据库 图像识别 开发者问答 阿里云建站 阿里云备案 云市场 万网 阿里云帮助文档 免费套餐 开发者工具 云栖号物联网 小程序开发制作 视频内容分析 企业网站制作 视频集锦 代理记账服务 2020阿里巴巴研发效能峰会 企业建站模板 云效成长地图 高端建站 云栖号弹性计算 阿里云云栖号 云栖号案例 云栖号直播