分页sql优化
如果分页sql里包含排序:
select * from (...order by id) where rownum <=20
因为要排序,所以即使是分页只取20条,执行计划还是要把所有满足条件的记录到取出来,然后再整体进行排序,再取结果的20条返回。
假如满足条件的结果很多,这个sql的性能会比较差。
如何避免排序?
可以给order by的字段加索引,由于索引本来就是按顺序的,所以按索引取前20条就可以,不需要再排序,就不需要查出所有满足条件的记录。
sql性能大大提高。
但是,如果order by字段是非空字段,oracle的空值是走不了索引,怎么办?
一个方法是,order by的字段尽量是主键或非空字段,当然这是不能保证的。
另一个方法是,增加这样的组合索引 index(id, 0),由于加入了常量0,这样就一定不是空值。当然与主键做组合索引也是同样道理,然而常量0比较省空间。
最后,如果order by字段来自标量子查询,那就算加了索引也是没用,这种情况只能尽量把sql改成表连接,而不用子查询(当然,有些时候会改变sql的业务含义)。
分页sql优化的更多相关文章
- SQL优化案例—— RowNumber分页
将业务语句翻译成SQL语句不仅是一门技术,还是一门艺术. 下面拿我们程序开发工程师最常用的ROW_NUMBER()分页作为一个典型案例来说明. 先来看看我们最常见的分页的样子: WITH CTE AS ...
- C# SQL优化 及 Linq 分页
每次写博客,第一句话都是这样的:程序员很苦逼,除了会写程序,还得会写博客!当然,希望将来的一天,某位老板看到此博客,给你的程序员职工加点薪资吧!因为程序员的世界除了苦逼就是沉默.我眼中的程序员大多都不 ...
- [读书心得]资料分页的优化,以SQL 2012的 OFFSET-FETCH为例
这是我的文章备份,原始出处:[读书心得]资料分页的优化,以SQL 2012的 OFFSET-FETCH为例 http://www.dotblogs.com.tw/mis2000lab/archive/ ...
- mysql--------大数据量分页sql语句优化
分页程序原理很简单,这里就不多说了,本篇文章主要说的是在数据表记录量比较大的情况下,如何将分页SQL做到更优化,让MySQL执行的更快的方法. 一般的情况下,我们的分页SQL语句是这样的: ,; 以上 ...
- 正确使用索引(sql优化),limit分页优化,执行计划,慢日志查询
查看表相关命令 - 查看表结构 desc 表名- 查看生成表的SQL show create table 表名- 查看索引 show index from 表名 使用索引和不使用索引 由 ...
- 报表性能优化方案之单数据集分页SQL实现层式报表
1.概述 我们知道,行式引擎按页取数只适用于Oracle,mysql,hsql和sqlserver2008及以上数据库,其他数据库,如access,sqlserver2005,sqlite等必须编写分 ...
- SQL优化技巧
我们开发的大部分软件,其基本业务流程都是:采集数据→将数据存储到数据库中→根据业务需求查询相应数据→对数据进行处理→传给前台展示.对整个流程进行分析,可以发现软件大部分的操作时间消耗都花在了数据库相关 ...
- MySQL 数据库性能优化之SQL优化
前言 有人反馈之前几篇文章过于理论缺少实际操作细节,这篇文章就多一些可操作性的内容吧. 注:这篇文章是以 MySQL 为背景,很多内容同时适用于其他关系型数据库,需要有一些索引知识为基础. 优化目标 ...
- sql优化点整理
此文是我最早开始sql优化至今整理的小知识点和经常遇到的问题,弄懂这些对优化大型的sql会有不少帮助 ---------------------------------使用了多余的外连接------- ...
随机推荐
- 关于C#使用Dllimport 导入vc++动态库后网站部署提示 “无法加载 DLL,找不到指定模块”的解决方法。
这次项目需要,做了一个C#写的WebService服务给外部调用,服务内部引用了算法库,本地调试已经通过,现场部署服务时各种提示找不到DLL文件. 第一.如果是包含有32位库在64位服务器系统上运行, ...
- jQuery 使用索引值容易出错的一个地方
先看代码 $('input:eq(2)').attr('value', function(index, val){ console.log(index); //输出0 }); 问:当前元素的索引值,不 ...
- PHP 去除HTML标签 HTML实体转字符 br转\n
1.去除HTML标签 strip_tags(string,allow)//剥去字符串中的 HTML 标签,但允许使用 <img> 标签:$str = strip_tags($str,&q ...
- 移动端rem 适配
在 index.html 中添加如下代码 <script> let html = document.documentElement; window.rem = html.getBoundi ...
- ECMAScript 5中的数据属性和访问器属性
简介 ECMAScript 定义的对象中有两种特殊的属性, 这两种特殊的属性在你定义对象属性时就会赋予, 我们在必要时可以改写这两种特殊的属性让其属性的访问更加的合理化, 这两种特殊的属性称呼及作用如 ...
- Js解析浏览器路径的方法
方法如下:function parseURL(url) { var a = document.createElement('a'); //创建一个链接 a.href = url; return { s ...
- nginx 配置优化(简单)
配置文件 正常运行的必备配置: 1.user username [groupname]:(推荐nginx) 以那个用户身份运行,以在configure指定的用户 ...
- cocos2dx 3.x (单选,多选,复选checkBox按钮的实现) RadioButton
// // LandLordsMakeNewRoom.hpp // MalaGame39 // // Created by work on 2016/12/19. // // #ifndef ...
- zabbix利用自带的模板监控mysql数据库
zabbix利用自带的模板监控mysql数据库 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 有些东西你不会的时候觉得它特别难,但是当你去做的时候就发现如此的简单~zabbix功能 ...
- composer--------------通过composer.json下载laravel包----barryvdh/laravel-debugbar
1.去Packagist网站https://packagist.org/packages/barryvdh/laravel-debugbar#dev-master找到