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

问题描述

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

现在开发系统,涉及到了分页查询,在做的时候就在想,能不能自动把查询sql语句通过参数自动封装成能够统计查询语句不在分页条件下查询出的数据量有多大,例如一般做法是:

1.先根据拼接的sql语句进行查询:select * from ecs_goods where goods_type = 1 limit 1000, 10

2.再统计数量:select count(*) from ecs_goods where goods_type = 1

然后就可以得出分页的相关数据了

现在想着的逻辑是:

1.程序员写出带查询的Sql语句:select * from ecs_goods where goods_type = 1

2.程序员传入分页信息参数获取到:limit 1000,10

3.程序自动根据以上两步拼接出:select count(*) from (select * from ecs_goods where goods_type = 1)

这样两种方式在查询速度及性能上会差距很大吗?为什么?

解决方案

前者效率高,limit后,后面的就不取了。

时间: 2024-11-04 16:46:03

sql-MySql执行分页时查询统计数据量的Sql语句差别及性能的相关文章

hibernate分页算法-hibernate分页时查询出了15条数据,一页显示10条,其余5条不显示

问题描述 hibernate分页时查询出了15条数据,一页显示10条,其余5条不显示 query.setFirstResult((pageNo-1)*10); query.setMaxResults(10); 在使用这个分页算法的时候我用模糊查询一共查处了15条数据,第一页显示了10,但为什么其余5条显示不出来 if("down".equals(flag)) { pageNo=(Integer)session.get("pageNo"); System.out.pr

mysql 自动停止-mysql执行存储过程时自动停止

问题描述 mysql执行存储过程时自动停止 DELIMITER $$ DROP PROCEDURE IF EXISTS generatorDataCopy $$ CREATE PROCEDURE generatorDataCopy(inpid VARCHAR(50),OUT msg VARCHAR(50)) BEGIN DECLARE err INT DEFAULT 0; -- 如果出现sql异常,则将err设置为1后继续执行后面的操作 DECLARE CONTINUE HANDLER FOR

《暗黑破坏神3》玩家游戏时长统计数据

外媒公布了一组暴雪娱乐公司公布的<暗黑破坏神3>玩家游戏时长统计数据.根据数据显示,<暗黑3>发售两个月至今,受调查的15930名玩家每人每天游戏时间从初期的9小时缩短至3.5小时,人均每日游戏时长下滑约60%. 如此看来,<暗黑破坏神3>发行首周销量630万份的神话就不再那么值得称道,就目前在游戏内容上的表现还不及运营8年的<魔兽世界>.暴雪如此,我国国内市场"后浪推不动前浪"的现状就更加明显.据统计,近年平均每年夭折的新游数量超过总数

MySQL中如何按月统计数据

表finance有俩个字段如下 date date money double(15,2) 下面需要对表 finance的2010年财务数据,按月进行统计 Sql代码 select DATE_FORMAT(date,'%Y-%m') as month,sum(money) as money from finance where DATE_FORMAT(date,'%Y')=2010 group by month order by month 下面是按周统计 查看MySQL的manual %X Ye

SQL*Plus 执行脚本时传递参数(@script_name var1,var2)

      在使用sqlplus执行sql脚本时,经常碰到向脚本传递参数的情形.类似于shell脚本的参数传递,我们同样可以向sql脚本传递参数,其方法是脚本后面直接跟多个连续的参数并以空格分开.本文描述该内容并给出示例. 1.SQLPlus 的帮助信息 下面的帮助信息是关于sqlplus调用带参脚本的说明 sqlplus -H <start> is: @<URL>|<filename>[.<ext>] [<parameter> ...] Run

hql执行update时,有数据为被更新

问题描述 updateTplTransPackpasetpa.signId=88598,pa.proStatus='50'where1=1andpa.seqId=1132503andpa.idin(38713904,38713917,38713932):这个hql语句有最后一个id的数据没有被更新,请帮忙看一下 解决方案 解决方案二:你看它有没有满足这个条件pa.seqId=1132503!解决方案三:除去效率,语句本身没有问题看看pa.id=38713932这条记录是否符合你的where条件解

批量生成大数据量的SQL脚本

业务逻辑:利用游标从数据库中现有的表数据,查询出部分属性,来插入到目标表中,来在目标表中生成大批量的数据,SQL实现如下: create or replace procedure add_subscription_c(i_count in number,-- i_count输入值为循环插入记录的次数 i_usersegment in varchar2, i_startaccount in number, o_resultcode out number, o_resulstring out var

LINQ to SQL的执行可能无法复用查询计划

查询计划 Sql Server在执行一条查询语句之前都对对它进行"编译 "并生成"查询计划",查询计划告诉Sql Server的查询引擎 应该用什么方式进行工作.Sql Server会根据当前它可以收集到的各种信息(例 如内存大小,索引的统计等等)把一条查询语句编译成它认为"最优 "的查询计划.很显然,得到这样一个查询计划需要消耗CPU资源,而大部 分的查询语句每次经过编译所得到的查询计划往往是相同的,因此除非指定了 RECOMPILE选项,Sq

sql排序分页 如果有新数据插入

问题描述 sql排序分页 如果有新数据插入 sql排序分页 如果有新数据插入并且排序在前面,那取第二页的时候就会有重复数据,而且新插入的数据展示不出来了,怎么解决呢? 各位可能没理解我意思: 比如说现在数据库里面几千万数据,还是实时插入的数据,我想排序后分页取,比如说第一次通过代码给数据库传参取第一页,取100条, 1.这个过程数据库是把所有数据几千万条全部load到内存中排序,然后进行分页,然后取出前100条吗? 2.那第二次,还会再load所有数据一次重新排一次序,再取出101-200之间的