分页

T-SQL查询高级—SQL Server索引中的碎片和填充因子

谁说胖子不能爱 提交于 2019-11-27 11:20:17
写在前面:本篇文章需要你对 索引 和SQL中数据的 存储方式 有一定了解.标题中高级两个字仅仅是因为本篇文章需要我的T-SQL进阶系列文章的一些内容作为基础. 简介 在SQL Server中,存储数据的最小单位是页,每一页所能容纳的数据为8060字节.而页的组织方式是通过B树结构(表上没有聚集索引则为堆结构,不在本文讨论之列)如下图: 在聚集索引B树中,只有叶子节点实际存储数据,而其他根节点和中间节点仅仅用于存放查找叶子节点的数据. 每一个叶子节点为一页,每页是不可分割的. 而SQL Server向每个页内存储数据的最小单位是表的行(Row).当叶子节点中新插入的行或更新的行使得叶子节点无法容纳当前更新或者插入的行时,分页就产生了.在分页的过程中,就会产生碎片. 理解外部碎片 首先,理解外部碎片的这个“外”是相对页面来说的。外部碎片指的是由于分页而产生的碎片.比如,我想在现有的聚集索引中插入一行,这行正好导致现有的页空间无法满足容纳新的行。从而导致了分页: 因为在SQL SERVER中,新的页是随着数据的增长不断产生的,而聚集索引要求行之间连续,所以很多情况下分页后和原来的页在磁盘上并不连续. 这就是所谓的外部碎片. 由于分页会导致数据在页之间的移动,所以如果插入更新等操作经常需要导致分页,则会大大提升IO消耗,造成性能下降. 而对于查找来说,在有特定搜索条件

django分页

只谈情不闲聊 提交于 2019-11-27 10:43:01
django实现分页的两种形式 一、django内置方法实现分页 django自带的分页不能设置样式 def domen(request): # for i in range(101): # models.DataInfo.objects.create(name="root_%s"%i,phone=11111) #获取url中cur_page的参数 cur_page=request.GET.get('cur_page') cur_page=int(cur_page) data_list=models.DataInfo.objects.all() from django.core.paginator import Paginator paginatos=Paginator(data_list,10) # per_page: 每页显示条目数量 # count: 数据总个数 # num_pages:总页数 # page_range:总页数的索引范围,如: (1,10),(1,200) # page: page对象 # res=paginatos.count # res=paginatos.num_pages # res=paginatos.page_range # res=paginatos.page(2).number users=paginatos.page(cur_page) #

数据库有百万数据量的情况下,分页查询的方法及其优化方式

房东的猫 提交于 2019-11-27 10:11:35
当需要从数据库查询的表有上万条记录的时候,一次性查询所有结果会变得很慢,特别是随着数据量的增加特别明显,这时需要使用分页查询。对于数据库分页查询,也有很多种方法和优化的点。 下面简单说一下我知道的一些方法。 准备工作 为了对下面列举的一些优化进行测试,下面针对已有的一张表进行说明。 表名:order_history 描述:某个业务的订单历史表 主要字段:unsigned int id,tinyint(4) int type 字段情况:该表一共37个字段,不包含text等大型数据,最大为varchar(500),id字段为索引,且为递增。 数据量:5709294 MySQL版本:5.7.16 线下找一张百万级的测试表可不容易,如果需要自己测试的话,可以写shell脚本什么的插入数据进行测试。 以下的 sql 所有语句执行的环境没有发生改变,下面是基本测试结果: select count(*) from orders_history; 返回结果:5709294 三次查询时间分别为: 8903 ms 8323 ms 8401 ms 一般分页查询 一般的分页查询使用简单的 limit 子句就可以实现。limit 子句声明如下: SELECT * FROM table LIMIT [offset,] rows | rows OFFSET offset LIMIT 子句可以被用于指定

HTML前台分页样例

久未见 提交于 2019-11-27 06:03:12
自己制作的一个分页示例,贴出来和大家分享一下: <!DOCTYPE html> <html lang="zh-cn"> <head> <meta charset="UTF-8"> <meta name="renderer" content="webkit" /> <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1" /> <title>Document</title> <style> .rptIntfPortlet .portletBody .showSection{ font-size: 12px; } .rptIntfPortlet .portletBody .showSection .showBody .showMore span.input span{ display: inline-block; border:1px solid #999; padding: 0px 8px; margin: 0px 2px; color: #3B5998; background-color:white; text-decoration: none; height: 22px; line-height: 22px; border-radius: 3px; cursor: pointer; } .hidden{

ThinkPHP5框架修改——添加自己的类库

有些话、适合烂在心里 提交于 2019-11-27 05:14:53
ThinkPHP5框架修改——添加自己的类库 说明:博主最近的项目,需要实现数据分页。但thinkphp自带的分页不想用。想把我之前自己 写的分页类加以使用。所以看了一下扩展类库的功能。既然工作完成了,想分享出来,一来自己做 笔记,二来给有需要学习的朋友一个方便。 1,thinkPHP运行流程 从tp5/public/index.php入口文件进入,通过加载框架引导文件/tp5/thinkphp/start.php 进行初始化常量,注册各种需要的机制,加载配置文件。准备完成后即可通过 /tp5/thinkphp/library/think/App.php类run()方法执行。 //这里只是概览一遍,具体细节可自行阅读thinkphp 2,准备工作 对框架进行修改,切忌修改核心代码。一般方法是在特定目录下进行修改,调用。 ThinkPHP提供了需要引入其他修改的特定目录 tp5/extend;(当然也可以在入口文件重新定义 EXTEND_PATH)来自定义修改目录。建议能不修改不要修改。 3,示例 具体需求:给thinkphp引入自定义的分页类Pagination.php。然后调用分页类进行业务代码的编写。 方法1:利用命名空间自动加载 类文件放置目录:tp5/extend/page/admin/Pagination.php 根据目录,给类文件绑定命名空间(psr-4规则): <

HibernateTemplate进行分页

我的未来我决定 提交于 2019-11-27 04:19:35
转:如何使用HibernateTemplate进行分页功能 在使用Hibernate时,可以用 query.setFirstResult(130);//设置取值的开始位置 query.setMaxResults(10); //设置读取数据的记录条数 方便的实现分页。 但是Spring 整合 Hibernate 时候用的 HibernateTemplate 却不支持分页,这样当查询记录过多时,就会给我们带来一些麻烦,因此需要自己包装一个类进行分页,具体实现如下: 使用spring的hibernateTemplate的回调机制扩展hibernateTemplate的功能实现分页。其中HibernateCallback()是一个接口,这种回调方式也是在java中常用的方法。 /** * 使用hql 语句进行操作 * @param hql * @param offset * @param length * @return List */ public List getListForPage(final String hql, final int offset, final int length) { List list = getHibernateTemplate().executeFind(new HibernateCallback() { public Object

c# oracle 分页

半世苍凉 提交于 2019-11-27 03:36:13
//////////////////////////////////////////oracle部分存储过程 create or replace package PACK_PAGE is TYPE type_cur IS REF CURSOR; --定义游标变量用于返回记录集 PROCEDURE PROC_PAGE ( Pindex in number, --分页索引 Psql in varchar2, --产生dataset的sql语句 Psize in number, --页面大小 Pcount out number, --返回分页总数 v_cur out type_cur --返回当前页数据记录 ); procedure PROC_PAGECOUNT ( Psqlcount in varchar2, --产生dataset的sql语句 Prcount out number --返回记录总数 ); end PACK_PAGE; /////////////////////////////////////////////////////// create or replace package body PACK_PAGE is PROCEDURE PROC_PAGE ( Pindex in number, Psql in varchar2, Psize in number,

【DRF分页】_

女生的网名这么多〃 提交于 2019-11-27 02:52:33
原文: http://106.13.73.98/__/68/ 我们数据库有几千万条数据,这些数据需要展示,我们不可能直接从数据库把数据全部读取出来. 因为这样会给内存造成巨大的压力,很容易就会内存溢出,所以我们希望一点一点的取. 同样,展示的时候也是一样的,我们必定会对数据进行分页显示. 本文将详细讲述DRF为我们提供的三种分页方式. 全局配置 REST_FRAMEWORK = { # 对所有分页器生效,但优先级低 'DEFAULT_PAGINATION_CLASS': 'rest_framework.pagination.PageNumberPagination', # 指定分页类(源码setting.py配置文件中的此配置为None) 'PAGE_SIZE': 5, # 每页显示5条数据 } @[toc] 我们先准备好用于测试分页的数据以及序列化类 . 数据表 from django.db import models class Test(models.Model): """用于测试分页的数据表""" name = models.CharField(max_length=64) 生成表记录: # 在Python脚本中调用Django环境 import os if __name__ == '__main__': # 将下面的'blog095.settings

在flask-sqlalchemy中使用分页

試著忘記壹切 提交于 2019-11-27 02:44:47
其实在使用中sqlalchemy和flask-sqlalchemy还是有点区别的的,sqlalchemy中使用query查询,而flask-sqlalchemy中使用basequery查询,他们是子类与父类的关系,flask-sqlalchemy中分页写的很明白了,但是对于我这种认识英文,又不能很好的理解英文的人来说,看文档还很吃力,这里记录一下。 这是文档地址: http://pythonhosted.org/Flask-SQLAlchemy/api.html#utilities 具体的使用方法: paginate = User.query.paginate(page, POSTS_PER_PAGE, False) object_list = paginate.items return render_template('simplecd_list.html',pagination = paginate,object_list = object_list) User是我的model,page是显示的第几页页数,POSTS_PER_PAGE每页显示多少条,paginate.items才是分页好的数据,下面是一个分页导航的例子: <div class="pagination "> <div class="row-fluid"> <div class="span3 offset2"> {

IPC——mmap

限于喜欢 提交于 2019-11-27 02:29:28
1. void *mmap(void *addr, size_t length, int prot, int flags, int fd, off_t offset); void *mmap64(void *addr, size_t length, int prot, int flags, int fd, off64_t offset); int munmap(void *addr, size_t length); #include <fcntl.h> #include <stdlib.h> #include <unistd.h> #include <stdio.h> #define file "./tmp" #define SIZE 1024 int main() { int fd = -1; int ret = 0; char *ptr = NULL; int pid = -1; if ((fd = open("/dev/zero", O_RDWR)) < 0) { perror("open"); ret = -1; goto __end__; } if ((ptr = mmap(NULL, SIZE, PROT_READ | PROT_WRITE, MAP_SHARED, fd, 0)) == MAP_FAILED) { perror("mmap"); ret = -1;