mysql的分页查询

为什么80%的码农都做不了架构师?>>>   hot3.png

order by case when 的用法(实现特殊情况的排序,如leader=1的排最前面):

select * from m_worker_project order by CASE WHEN leader = 1 THEN 100 ELSE 1000 END

项目中的动态查询语句(参数是对象)、模糊查询(变量格式'%${workerName}%')、特殊排序: 

<select id="findAllWorkerByWhere" resultMap="WorkerMap">
select * ,(select count(*) from m_worker_project where 1=1
<if test="projectWorktypeId>0">
and project_worktype_id=#{projectWorktypeId} 
</if>
) as 'count' from m_worker_project where 1=1<if test="workerName != null and workerName!=''">
and worker_name like '%${workerName}%'
</if>
<if test="projectWorktypeId>0">
and project_worktype_id=#{projectWorktypeId} 
</if>
<if test="id>0">
and id=#{id}
</if>
<if test="1==1">
and deleted=0 
</if>order by CASE WHEN leader = 1 THEN 100 ELSE 1000 END
</select>

 

Mysql的分页查询语句的性能分析最基本的分页方式:

SELECT ... FROM ... WHERE ... ORDER BY ... LIMIT ...

在中小数据量的情况下,这样的SQL足够用了,唯一需要注意的问题就是确保使用了索引:举例来说,如果实际SQL类似下面语句,那么在category_id, id两列上建立复合索引比较好:

代码如下:

SELECT * FROM articles WHERE category_id = 123 ORDER BY id LIMIT 50, 10 

---(第一个参数50是偏移量,也就是显示数据是从查询结果第51个开始,第二个参数10是每页显示10条)

----ORDER BY   id   DESC(按id降序排列)【ASC是升序排列】

 

子查询的分页方式:

随着数据量的增加,页数会越来越多,查看后几页的SQL就可能类似:

代码如下:

SELECT * FROM articles WHERE category_id = 123 ORDER BY id LIMIT 10000, 10

 

一言以蔽之,就是越往后分页,LIMIT语句的偏移量就会越大,速度也会明显变慢

此时,我们可以通过子查询的方式来提高分页效率,大致如下:

SELECT FROM     articles WHERE id >=

(SELECT id FROM articles WHERE category_id = 123 ORDER BY id LIMIT 10000, 1) LIMIT 10

 

JOIN分页方式

SELECT FROM `content` AS   t1

JOIN (SELECT id FROM `content` ORDER BY id desc LIMIT ".($page-1)*$pagesize.", 1) AS t2 

WHERE t1.id <= t2.id ORDER BY t1.id desc LIMIT $pagesize;

 

经过我的测试,join分页和子查询分页的效率基本在一个等级上,消耗的时间也基本一致。 explain SQL语句:

id select_type table type possible_keys key key_len ref rows Extra

 PRIMARY <derived2> system NULL NULL NULL NULL 1

 PRIMARY t1 range PRIMARY PRIMARY NULL 6264 Using where

 DERIVED content index NULL PRIMARY NULL 27085 Using index

 

那就直接用子查询语句!

为什么会这样呢?因为子查询是在索引上完成的,而普通的查询时在数据文件上完成的,通常来说,索引文件要比数据文件小得多,所以操作起来也会更有效率。

实际可以利用类似策略模式的方式去处理分页,比如:判断如果是一百页以内,就使用最基本的分页方式,大于一百页,则使用子查询的分页方式。

 

 

转载于:https://my.oschina.net/8824/blog/2413611

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/537564.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

.describe() python_python的apply应用:一般性的“拆分-应用-合并”,附加详细讲解

跟aggregate一样&#xff0c;transform也是一个有着严格条件的特殊函数&#xff1a;传入的函数只能产生两种结果&#xff0c;要么产生一个可以传播的标量值(如np.mean)&#xff0c;要么产生一个相同大小的结果数组。最一般化的GroupBy方法是apply&#xff0c;apply会将待处理的…

DNS服务(4)Slave DNS及高级特性

为了简化运维人员的负担&#xff0c;使用Master/Slave DNS架构的情况比较好&#xff0c;现在我们来简单叙述一下Master/Slaver DNS的特点主DNS服务器&#xff1a;维护所负责解析的域内解析库服务器&#xff1b;解析库由管理员维护&#xff1b;从DNS服务器:从主DNS服务器或其它的…

python运算符_Python运算符总结

建议&#xff1a;字符串拼接操作尽量多用join&#xff0c;而减少用”“ join操作时会先计算字符操作所用到的空间总和大小&#xff0c;然后申请内存。然后进行字符串连接操作。所以join的时间复杂的近似O(n)。 操作符连接操作符时&#xff0c;由于字符串是不可变对象&#xff0…

jupyter notebook常用快捷键

Jupyter Notebook 有两种键盘输入模式。编辑模式&#xff0c;允许你往单元中键入代码或文本&#xff1b;这时的单元框线是绿色的。命令模式&#xff0c;键盘输入运行程序命令&#xff1b;这时的单元框线是灰色。 命令模式 (按键 Esc 开启) Enter : 转入编辑模式Shift-Enter : …

Eclipse安装试用Hanlp

【1】确定正确安装配置Java和Eclipse 【2】下载HanLp的各种东西 hanlp.linrunsoft.com/services.ht… 下载这四个文件到本地&#xff0c;我是放在桌面的一个文件夹了。【3】 把jar包导入到Eclipse 在Eclipse先新建一个项目File——New——Java Project--[名字&#xff1a;Hanlp…

升级pip最新版本

python很多库对pip版本有要求&#xff0c;升级命令为&#xff1a; python -m pip install --upgrade pip windows在cmd下&#xff0c;输入以上命令

bat 存储过程返回值_使用Mybatis过程中遇到的坑

常规SSM框架开发中&#xff0c;mybatis遇到的坑是最多的&#xff0c;把以下几点坑记录下来防止以后再遇到同样的情况。1、mybatis 若果在mapper中返回值没有配置resultMap而是使用resultType直接返回的话&#xff0c;那么当心默认配置中的驼峰匹配规则&#xff0c;参考以下配置…

【洛谷 P2513】 [HAOI2009]逆序对数列(DP)

题目链接 这种求方案数的题一般都是\(dp\)吧。 注意到范围里\(k\)和\(n\)的范围一样大&#xff0c;\(k\)是完全可以更大的&#xff0c;到\(n\)的平方级别&#xff0c;所以这暗示了我们要把\(k\)写到状态里。\(f[i][j]\)表示前\(1\)~\(i\)的排列逆序对数为\(j\)的方案数。 现在考…

think python下载 中文版开源!这或许是最经典的编程教材

《Think Python》是很多Python初学者的不二入门教材&#xff0c;受到广泛好评。该书原作者是美国Olin工程学院的教授Allen B. Downey&#xff0c;目前该书的原版和中文版本都已免费开源。 中文版本译者是一名自学Python的编程爱好者。选择翻译《Think Python》&#xff0c;一是…

datatable的数据进行组内排序_排序算法学习分享(四)希尔排序

排序&#xff0c;也称为排序算法&#xff0c;可以说是我们学习算法的过程中遇到的第一个门槛&#xff0c;也是实际应用中使用得较为频繁的算法&#xff0c;我将自己对所学的排序算法进行一个归纳总结与分享&#xff0c;如有错误&#xff0c;欢迎指正&#xff01;排序算法学习分…

jupyter notebook 安装代码提示功能

效果 安装成功后&#xff0c;输入部分代码&#xff0c;按 tab 键&#xff0c;会提示代码 安装步骤 1.安装nbextensions 从国内的pip镜像下载快 pip install -i http://pypi.douban.com/simple --trusted-host pypi.douban.com jupyter_contrib_nbextensions jupyter contr…

转:EL表达式的11个内置对象

原文地址&#xff1a;https://blog.csdn.net/qq_17045385/article/details/54799998 EL是JSP内置的表达式语言 JSP2.0开始&#xff0c;不让再使用Java脚本&#xff0c;而是使用EL表达式和动态标签来代替Java脚本 ############EL替代的是<%... %>&#xff0c;也就是说EL只…

python需要配置环境变量吗_python为什么会环境变量设置不成功

学习python编程&#xff0c;首先要配置好环境变量。本文主要讲解python的环境变量配置&#xff0c;在不同版本下如何安装 Windows 打开Python官方下载网站 https://www.python.org/downloads/release/python-370/ x86:表示是32位电脑 x86-64:表示是64位电脑 目前Python版本分为…

一维数组、二维数组、三维数组、四维数组、多维数组的理解

以图书馆来举例 一维数组是一条线 二维数组是一页纸 三维数组是一本书 四维数组是书架 五维数组是图书室2201&#xff08;好几个书架&#xff09; 六维数组是图书馆某一层&#xff0c;2楼/3楼&#xff0c;好几个图书室 七维数组是整个图书馆 第N维数组是宇宙..................…

线性筛

我就是我&#xff0c;一辈子都学不会线性筛的菜鸡 一篇非常好的博客转载于:https://www.cnblogs.com/yzxverygood/p/9907281.html

在资源使用状况视图中查看资源的负荷情况

只有工时类资源才会出现过度分配&#xff0c;因为工时类资源通常指组织内部的人力资源或者机械设备等&#xff0c;这些资源通常都有数量上的瓶颈&#xff0c;也只有工时类资源才会在【资源工作表】中设置它的最大单位和资源可用性&#xff0c;这就限制了它在不同时间段内的可用…

python常用单词自由且开放_python常用英语单词词汇 unit7

1. Darcula IntelliJ IDEA自带的黑色主题名称&#xff0c;Android Studio是基于IntelliJ IDEA的。 2. Appearance /prns/ n. 外观&#xff1b; 3. Custom /kstm/ n. 习惯&#xff1b; 4. UI abbr. 用户界面&#xff08;user interface&#xff09; 5.Terminate /tmnet/ 终止、结…

2018.10.29-2018.11.4

简述osi七层模型和TCP/IP五层模型应用层OSI 参考模型中最靠近用户的一层&#xff0c;是为计算用户提供应用接口&#xff0c;也为用户直接提供网络服务。常见的应用层网络服务协议有&#xff1a;HTTP,HTTPS,FTP,POP3,SMTP等表示层表示提供各种用于应用层数据编码和转换功能&…

CSV文件转Excel后数字自动转换成科学计数法的解决方法

CSV文件用Excel打开后&#xff0c;长度超过11位的数字自动转换成科学计数法显示&#xff0c;末尾数字变成“0000”&#xff0c;如何解决这一问题&#xff1f; 以“老劳模系统数据.CSV”为例&#xff0c;身份证码是科学计数法了 第一步&#xff1a;新建excel&#xff0c;用 off…

python 小说 云_python小说网站

广告关闭 腾讯云11.11云上盛惠 &#xff0c;精选热门产品助力上云&#xff0c;云服务器首年88元起&#xff0c;买的越多返的越多&#xff0c;最高返5000元&#xff01; python爬虫之小说网站--下载小说(正则表达式)思路:1. 找到要下载的小说首页,打开网页源代码进行分析(例:htt…