大数据量Mysql查询后经过循环使用python分片

1 问题描述:
(1)使用mysql查询基础数据,这里只有三四个基础的查询条件,联了一个表,同时有limit分页了;
(2)之后经过一系列逻辑处理,在这些处理中又包含了很多sql查询,而且是在第(1)条查询出来的结果基础上查询,以前是先分页的,第(1)一次只查询了十条,第二步最多循环十次,但是现在的新逻辑是,查询出来后,经过(2)的处理,不满足筛选条件的数据remove掉,然后再返回最后剩下的数据
(3)由于每一页都会remove()掉部分数据,我曾经尝试定义全局变量,记录删除数据,但是只能得到我当前查询这一页删除了多少,无法获取总共删除了多少,而且每一页的数量都不一定是10条,一般来说是10条以下(因为会删除部分不符合筛选条件的数据),但是要求是要获取满足筛选条件的总数据量,而且需要正常分页
(4)于是我不用limit分页,直接取全量数据,然后再记录删除的数据量,使用切片手动分页,就能获取总数据了,每页也都是10条,但是循环次数过多,数据量稍微大一点儿,就需要49秒左右
2 部分相关代码:
(1)基础查询:

SELECT
op.order_id,
opc.order_code,
op.created_at AS create_time,
opc.departure_date,
opc.end_date,
opc.company,
opc.channel_id,
opc.retail,
opc.final_cost,
opc.has_pay,
opc.commission_price,
opc.commission_type,
opc.commission_value \
FROM
order_product_customize AS opc \
LEFT JOIN order_product AS op ON opc.order_product_id = op.order_product_id \
WHERE
{ 0 }
ORDER BY
opc.created_at DESC { 1 }

(2) 手动分页:

nextPage = limit_start+page_size
result['data_list'] = result['data_list'][limit_start:nextPage]
result['total_num'] = result['total_num'] - self.delNum

3 报错信息:
没有报错,只是执行时间极其长
一台比较好的机器,执行时间为27.72秒,本地执行时间接近40秒,无法上传图片

4 已经尝试过的办法
(1)记录删除次数再减去(因为每次都只查一页,只能获取当前页删除的条数)
(2)取符合筛选条件的全量数据(数据量太大,又有循环,导致速度极其慢)
(3)每次查20条左右数据,然后获取没删除的前10条,记录最后一条的id(动态分页,无法获取每一页第一条数据,无法保证20条经过筛选后还能剩下10条)

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
其他相关推荐
MySQL的分片(二)——MySQL分片
前言 从开发人员的角度来说,为什么要了解和掌握MySQL分片? 第一,了解MySQL分片可以更合理地定制分片策略,选分片字段是要讲科学的。 第二,了解MySQL分片以后如果出现故障报错,也有助于问题的排查。 第三,关系到开发过程中的代码调整,做分片后的MySQL数据库操作受到限制,比如join之类的操作,跨分片的操作,事务管理等,都是要注意的,可能需要代码的调整。 分区、分表、分片、分库...
mysql大数据量查询的注意事项和技巧
1、在Insert等操作MYSQL的时候不要关闭MYSQL如果非的关闭请使用mysqladmin的shutdown方法而不是mysql.server stop方法。 2、请在需要的地方设置INDEX。 3、做好数据备份 4、使用更多的内存 5、启动查询缓存,是最终提升性能的方法,即使你没设置INDEX sql中尽量不要带函数 例如 now() 等等,如果带了这些函数 就不启用 缓存...
mysql如何处理大数据量的查询
在实际的任何一个系统中,查询都是必不可少的一个功能,而查询设计的好坏又影响到系统的响应时间和性能这两个关键指标,尤其是当数据量变得越来越大时,于是如何处理大数据量的查询成了每个系统架构设计时都必须面对的问题。本文将从数据及数据查询的特点分析出发,结合讨论现有各种解决方案的优缺点及其适用范围
mysql循环查询
大家先请看以下sql代码rn-------------------------------------------------------------------------------------------------------------------------------------------------------------rnrnSELECT A.*, (rn SELECTrn CASErn WHEN tb2_1.Guidk IS NULL THENrn 'false'rn ELSErn 'true'rn ENDrn FROMrn ims_warehouseOperation AS tb1_1rn LEFT JOIN ims_warehouseRights AS tb2_1 ON tb2_1.OGuidk = tb1_1.Guidkrn rn WHERErn tb1_1.Guidk = 'bb71ffcf-1dff-40c9-94c3-60680b0bb427'rn) AS 'w_1',rn (rn SELECTrn CASErn WHEN tb2_1.Guidk IS NULL THENrn 'false'rn ELSErn 'true'rn ENDrn FROMrn ims_warehouseOperation AS tb1_1rn LEFT JOIN ims_warehouseRights AS tb2_1 ON tb2_1.OGuidk = tb1_1.Guidkrn AND tb2_1.WGuidk = A.Guidkrn WHERErn tb1_1.Guidk = '2ad84691-5819-4a66-a47d-2833dc76ee72'rn) AS 'w_1',rn (rn SELECTrn CASErn WHEN tb2_1.Guidk IS NULL THENrn 'false'rn ELSErn 'true'rn ENDrn FROMrn ims_warehouseOperation AS tb1_1rn LEFT JOIN ims_warehouseRights AS tb2_1 ON tb2_1.OGuidk = tb1_1.Guidkrn AND tb2_1.WGuidk = A.Guidkrn WHERErn tb1_1.Guidk = '41d36e8d-b45b-4ca7-a8d1-d5738fa49297'rn) AS 'w_1',rn (rn SELECTrn CASErn WHEN tb2_1.Guidk IS NULL THENrn 'false'rn ELSErn 'true'rn ENDrn FROMrn ims_warehouseOperation AS tb1_1rn LEFT JOIN ims_warehouseRights AS tb2_1 ON tb2_1.OGuidk = tb1_1.Guidkrn AND tb2_1.WGuidk = A.Guidkrn WHERErn tb1_1.Guidk = '4faae2db-1cc0-4b33-adcc-1a81b8be8280'rn) AS 'w_1',rn (rn SELECTrn CASErn WHEN tb2_1.Guidk IS NULL THENrn 'false'rn ELSErn 'true'rn ENDrn FROMrn ims_warehouseOperation AS tb1_1rn LEFT JOIN ims_warehouseRights AS tb2_1 ON tb2_1.OGuidk = tb1_1.Guidkrn AND tb2_1.WGuidk = A.Guidkrn WHERErn tb1_1.Guidk = '20737a56-f75c-4f21-b1cb-855620835e19'rn) AS 'w_1'rnFROM ims_warehouse AS Arn--------------------------------------------------------------------------------------------------------------------------------------------------------------------rn程序主要想得到这样子的效果[img=https://img-bbs.csdn.net/upload/201610/17/1476688132_558484.png][/img]rnrn可是这种写法mysql不支持,会报这样子的错误 1054 - Unknown column 'A.Guidk' in 'on clause'。求大神们帮我修改修改,谢谢!!
Mysql分片
目录分片数据库分片概述分片需要解决的问题事务问题什么是分布式事务分布式事务产生的原因解决事务问题可行的方案:跨节点Join的问题跨节点的count,order by,group by以及聚合函数问题全局序列号 分片 数据库分片概述 什么是数据切分: 将数据量大的表或表比较多的数据库切分成多个部分放到同一数据库不同表、同一数据库实例节点不同数据库或不同数据库实例节点上 为什么要数据切分 优点...
python的分片
Python中的分片 Python中使用索引来访问序列中的某一个元素,如果要访问序列中某一定范围内的元素,可以使用分片来完成。 分片的结构: sequence[start:stop:step]   第一个参数是开始位置,第二个参数是结束位置不包括该位置数据,第三个参数是步长,默认为1,可以为负的往前去取数据...
Python的分片
分片操作可以可以简单的理解为对列表的切割; 语法: sequence[start:stop] #其中start是开始的下标位置,stop是停止的下标位置,start开始的下标位置是 包含在内的,但是stop的下标的位置是(stop-1),也可以说成为stop是你要截取列表的最右边值加1 示例 #创建一个新的列表,并截取这个列表中的从3开始的位置截取到5 l = [3,2,4,3,5,9,...
怎样使用循环查询?
查询的要求如下rnDECLARErni INT := 1;rnBEGINrn while i<100rn LOOPrn i:=i+1;rn select * from table where i between StartNumber and EndNumber;rn END LOOP;rn COMMIT;rnEND;
mysql 存储过程和循环使用
[color=green][b][size=x-large][quote]mysql 循环使用:[/quote][/size][/b][/color] [size=small][b]一 、 while 循环[/b][/size] [code=&quot;java&quot;]begin declare pageSize integer default 300; declare totalCount int...
ElasticSearch分片查询方式
本课程涵盖ELK大型日志分析平台的完整流程,包括Logstash采集接入不同渠道的日志(Apache日志,Nginx 日志,系统日志等等),ElasticSearch对各种渠道的日志建立索引、存储实现高级查询,Kibana实现数据分析和数据可视化。
mongo api,distinct查询后,循环查询
为了减轻手工查询,测试对比数据的工作量。写成代码还挺好用的,在这里记录下: import com.mongodb.*; import java.util.List; public class Test3 { public static void main(String[] args){ try { MongoURI uri = new
Python循环参数的使用
咱们大家都知道Python是C语言写的,所以呢有很多参数的使用方法也都是和C语言相差不多的 今天给大家分享一些关于Python循环的方法以及参数 再C语言中咱么使用的循环是 for while 循环,同样Python也是如此只是使用发放有些不同 首先介绍for循环的使用 >>> man = ['张三','李四','王麻子','三']#定义一个数组 >>> for i in man:#使用
如何将服务器端经过查询后的数据导出到客户端?
想了很长时间,还是没有思路,谢谢各位,帮忙吧!!
Python mysql查询问题
运行同一个脚本 有时候运行正常,有时候运行报错rn_mysql_exceptions.ProgrammingError: (2014, "Commands out of sync; you can't runrnthis command now")
Python学习笔记——MySQL查询
目录 查询 条件 排序 聚合函数 分组 group by group by + group_concat() group by + 集合函数 group by + having group by + with rollup 获取部分行 连接查询 自关联 子查询 总结 查询 创建数据库、数据表 -- 创建数据库 create database python_t...
python修炼——MySQL 查询!
MySQL 查询 查询以后会大量使用 SQL 语句没有标准答案,无非就是运行速度的问题 完整的select语句 select distinct * from 表名 where .... group by ... having ... order by ... limit start,count --执行顺序为 from 表名 where .... group by ... sel...
使用python将mysql的查询数据导出到文件
mysql官方提供了很多种connector,其中包括python的connector。 下载地址在:http://dev.mysql.com/downloads/connector/python/  直接安装即可。   在python中: 1. 连接: import mysql.connector cnx = mysql.connector.connect(user='scot...
mysql 分片详解
一种以ID特征为依据的数据分片(Sharding)策略 http://blog.zhaojie.me/2010/03/sharding-by-id-characteristic.html
经过数据清洗后的大众点评Mysql数据表文件
文件为sql格式,可以直接导入进Mysql数据库中。共有6张表,为菜品表、店铺表、顾客表、顾客消费表、菜品分布表、商铺菜品表。
高效循环插入大数据量测试
declare idx number(22):=0; carnum varchar(50):=''; begin loop idx := idx + 1; insert into XX (name) values ('123456'); exit whe...
【MYSQL】mysql大数据量分页性能优化
转载地址: http://www.cnblogs.com/lpfuture/p/5772055.html https://www.cnblogs.com/shiwenhu/p/5757250.html P1 1.   直接用limit start, count分页语句, 也是我程序中用的方法: select * from product limit start, count 当起始页较小...
大数据量查询的优化(转载)
http://visualcatsharp.iteye.com/blog/283705 感谢visualcatsharp,学习中 某个库中有一个论坛主帖表,每天增加数千的数据,现在整个表的数据量已经是百万级。由于论坛不断升级,增加了N个字段,为了实现良好的扩展性,将某些字段移到了一个子表中,而子表中的某个字段又是外键关联另一个表。没有添加任何非聚集索引。     当使用top查询N条数据的时候...
c#查询大数据量的问题
有上千万条数据,查询就死机,有什么好办法?
hibernate 查询大数据量的表
一个A表中有20多万条数据,当我用select count(*) from A where age=18 查询时,能得到查询的结果,其中A表中,关于 age=18的数据 有1万条。rn但,当我用select count(*) from A where age=20 查询时,页面一直就不会响应了,如果多执行几次,就会报内存溢出,其中A表中,关于 age=20的数据 有10万多条。rn我用的是mysql数据库,并且我在A表中的age字段已经建立了索引。rn请问大家有办法来优化hibernate的数据查询吗?rn
大数据量查询优化问题
rnrn 我的数据量是100万条记录,刚开始加载不慢,然后连续点击下一页,下一页,也不慢,rn rn 但我从第1页跳转到6000页就很慢,然后也连续点击下一页、下一页也很慢,rn rn 这是怎么回事啊,在数据库如何去做优化啊rn rn hibernate的分页如下:rnrn public int getTotalSize(String sql)rn String hql = "select count(*) " + sql;rn int count = ((Integer)this.getHibernateTemplate().find(hql).iterator().next()).intValue();rn return count;rn rnrn public List findAll(Integer currentPage, Integer pageSize, String sql) rn final int startRow = (currentPage - 1) * pageSize;rn final int pageSize1 = pageSize;rn final String userQuery = sql;rn rn return this.getHibernateTemplate().executeFind(new HibernateCallback() rn public List doInHibernate(Session session)rn throws HibernateException rn Query query = session.createQuery(userQuery);rn query.setFirstResult(startRow);rn query.setMaxResults(pageSize1);rn List list = query.list();rn return list;rn rn );rn
关于大数据量的查询问题
现在有一个表数据大有150万条,MDF文件有2G多,现在的查询速度很慢!rn如查询当天的数据:select count(*) from company WHERE (day(BuildDate) = day(GETDATE()))rn很久才出来数据而且好象结果也没有对!rnrn如果加索引应该怎么加,哪些字段应该加!请达人指教!
关于大数据量查询问题
关于数据库优化这方面的问题讨论也挺多的r 不过我想知道对于大数据量的表查询大家都是用什么方法呢r 我有一个一百万数据量的表r 现在只是按名字的关键字检索 也就是 where name like %?%r 这样检索起来特别慢r 后来用了分页方法 一次拿10条出来 到最后不够十条再算出尾页 解决了慢的问题 但如果输入的关键字是数据不存在的 那等于也是遍历整个表r 想到加索引 在那么字段加 速度似乎快了点 但还是要花费一段时间 也听说like %?%加索引无效(不知是否为真?)r 还有就是现在还要加上一个排序 order by hot 可以加个索引 r 但速度还是慢 10秒以上r r 各位说说有什么方法解决呢? 问题补充: 现在主要问题出在当检索不到数据的时候特别慢 不是其他
大数据量查询,进度条 解决方案
p_phonecall的表结构很简单,就5列。但是这个表的数据量很大,有6千万--1亿条记录左右!!rnbilling_nbr--手机号rnny--所属月份rncell_id--小区编号rnjs-计数(全部为1)rnduration--通话时长(单位秒)rnrn现在每次到了select的时候 程序就假死了rn怎么解决啊rn谢谢大家了,很着急啊 !rnrn代码如下:rnfor ll_i=1 to dw_phoneno_oftelphone.rowcount() //手机号码rnrnls_phoneno = dw_phoneno_oftelphone.object.phoneno[ll_i]rnrnfor ll_j=1 to dw_xq.rowcount() //小区编号rnyield()rn//进度条rnif isValid(w_prostep) then w_prostep.f_step() //rnw_prostep.SetRedraw(TRUE)rnrnll_xqid = dw_xq.object.id[ll_j]rnls_xqbh = dw_xq.object.xqbh[ll_j]rnls_xqmc = dw_xq.object.xqmc[ll_j]rn//查询某月、某手机号、在某小区的通话次数rnSELECT sum(js) into :ll_hz_count FROM p_phonecall rnWHERE ( p_phonecall.billing_nbr = :ls_phoneno) AND ( p_phonecall.ny = :ls_ny ) and (cell_id=:ls_xqbh) ;rnif isnull(ll_hz_count) then ll_hz_count=0rnrnIF ib_cancel = TRUE THEN goto rettrnrnnextrn//查询某月、某手机号的通话次数总和rnSELECT sum(js) into :ll_all_count FROM p_phonecall rnWHERE ( p_phonecall.billing_nbr = :ls_phoneno) AND ( p_phonecall.ny = :ls_ny ) ;rnif isnull(ll_all_count) then ll_all_count=0rnrnnextrnrn
大数据量如何做查询好?
目前要做个学校方面的成绩查询系统,要求就是学生只要输入姓名或学号信息就可以查出其在学校期间所有的考试成绩资料,我是这样想的,在后台给每个老师上传成绩的权限,老师可以将每次考试的成绩在后台上传发布,发布成绩时,把成绩统统放到一个表中这样学生就可以查询到每次考试的成绩了,但是好像这种想法也不太现实,如果一个学校班级多考试也多的话那一个access中的表可能连一个学期的考试都没有办法保存得完(请问access中的表中可以保存多少条记录?)不过如果不这样办的话要达到“学生只要输入姓名或学号信息就可以查出其在学校期间所有的考试成绩资料”又很难办到,请问怎么办?
大数据量查询问题
存在一个数据量过亿的数据集,其中一个数据出现的概率在50%以上。请问用什么算法可以快速的查找到这个数据。思路
查询大数据量文件的算法
现有一个配置文件,里面记录着号码 - 归属地的信息,数据量很大。rn服务器提供根据号码查询归属地功能,此功能并不常用。rnrn不使用数据库的情况下,请问如何设计比较合理?
SQL大数据量查询
各位大侠你们好,现在我有个急需解决的问题:rnrn 我在查询数据库中表TABLE_DATA(数据大约有100万条)的时候,导致其他用户无法进行Update和Delete操作,数据库貌似死锁。rnrn我想知道如何避免此类情况的发生,例如:rnrn 可以分块提取数据吗?rnrn希望大侠们给予指导。
hibernate大数据量查询问题
rnrn 大家好,我从银行里取数据,四万条就很慢了,几十万根本不行,抛出out of memory异常,我用hibernate来做分页,hibernate好像是一次性从数据库取出全部的数据,不是按每页的页数来取的。我的手提才1G内存,我的hibernate分页是这样子的。 rnrnpublic List findAll(Integer currentPage, Integer pageSize, String sql) rnfinal int startRow = (currentPage - 1) * pageSize; rnfinal int pageSize1 = pageSize; rnfinal String newsql = sql; rnrnreturn this.getHibernateTemplate().executeFind(new HibernateCallback() rnpublic List doInHibernate(Session session) rnthrows HibernateException rnQuery query = session.createQuery(newsql); rnquery.setFirstResult(startRow); rnquery.setMaxResults(pageSize1); rnreturn query.list(); rn rn);rnrn我用spring 来管理 hibernate,hibernate的属性设置是这样的rnrnrn rn rn rn rn rn org.hibernate.dialect.DB2Dialectrn rn truern 50rn org.hibernate.cache.NoCacheProviderrn falsern falsern falsern rn
JAVA如何查询大数据量
遇到大数据量查询,大家是怎么解决的,例如百万或千万条数据的一个表,要怎么查,页面该怎么显示呢?rn肯定不能一次查出来吧,但就算带条件过滤,SQL执行也会很慢,大家都是怎么解决的?
oralce大数据量查询的优化
mes_mat_txn_r2_hist记录条数:4015745         mes_mat_material_h记录条数:7933411 两个数据表的数据分别都在百万级以上, 原始SQL语句: select * from mes_mat_txn_r2_hist where sid=(select max(a.sid)        from mes_mat_txn_r2_his...
关于大数据量查询的问题
数据库是Mysql的rn内网连接数据库rn有一张表user。里面的字段有:rnID,Userid,UserName,Level,Info.....rn数据有:rn1,1,abc,1,abc...rn1,2,efc,20,ccc...rn2,3,kkk,55,llll..rn2,4,adkd,33,kii..rn2,5,iiao,23,kol..rn3,6,lli,44,wodkll..rnrn要现在有20万个ID,这个ID对于的是user表中的IDrn现在要查询这些ID里面的Level和Infornrn我现在的连接数据的方法:rn[code=C#]rnpublic static readonly string CONN_STRING = System.Configuration.ConfigurationSettings.AppSettings["db"];rnrn#region ExecuteReaderrn public static MySqlDataReader ExecuteReader(string cmdText)rn rn return ExecuteReader(cmdText, null);rn rnrn public static MySqlDataReader ExecuteReader(string cmdText, params MySqlParameter[] cmdParams)rn rn MySqlConnection conn = new MySqlConnection(CONN_STRING);rn MySqlCommand comm = PrepareCommand(null, conn, cmdText, cmdParams);rn comm.CommandTimeout = 8000;rn MySqlDataReader dr = comm.ExecuteReader(System.Data.CommandBehavior.CloseConnection);rn comm.Parameters.Clear();rn return dr;rn rn#endregionrn[/code]rnrn如果20万个ID一起查的话,好慢呀。我等了半天还没好。而且页面容易死掉。。rn请问有什么有效率的方法可以查出这些内容吗?rn请各位大大帮帮忙啦。。谢谢。。分不够我还可以加。。
查询大数据量结果集的性能优化
select * 操作rn表规模在1000万条左右rn怎样做能加快查询速度,减少查询时间rn如果分次查询是不是能起到一定的效果rn
大数据量的查询操作问题
我现在想把某个表的部分数据,转移到另外一个表中,使用网页的形式,发现进行不了,数据量太大了。rnrn想要做的的情况是:rnSELECT ID,name,sex,classes FROM student where GoodsType<>5 and BZ_ship=1 and (BZ_ship_S<>0 or BZ_ship_SS<>0) and D_Effic=1 order by ID descrnrn然后每读取一条符合的数据,就直接插入到:rninsert into new_student (JAID,name,sex,classes) values ("&rs012(0)&","&rs012(1)&","&rs012(2)&","&rs012(3)&")rn这个表中,这个在sqlserver企业管理器中,该如何实现呢?
关于大数据量查询
当在一个400w条以上数据的表中运行查询时,如果where中使用索引列和值比较作为筛选条件就比较快,和变量比较作为筛选条件就比较慢,为什么,如何解决?rnrn例:rn其中actiontime建立索引了rnrnDECLARE @TheDate datetimernSELECT @TheDate = getdate()rnrnSELECT actiontime,UserIDrnfrom flogrnWHERErn--(ActionTime between dateadd(day,-1,getdate()) and getdate()) --***slow***rnActionTime between '2004-9-23' and '2004-9-24' --***fast***rn
大数据量查询问题,求解
现在一个数据库DB1,里面有个表A;另外一个数据库DB2,里面有表B,两数据库都在一个mysql里面rnA有个xy字段,建立了索引,记录约30万rnB有个xy字段,没建立索引,两表的xy字段都是varchar类型,记录约60万rn现在要获得两表中xy字段不相同的所有记录,然后插入DB1的C表中rn要怎么写高效率的sql语句?
相关热词 c#入门推荐书 c# 解码海康数据流 c# xml的遍历循环 c# 取 查看源码没有的 c#解决高并发 委托 c#日期转化为字符串 c# 显示问号 c# 字典对象池 c#5.0 安装程序 c# 分页算法