首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

使用Django从数据库中随机取N条记录的不同方法及其性能实测

2018-07-31 发表 编程语言 2674 【声明】:本文中的实验仅限于特定数据库特定框架。...这里(stackoverflow)有一篇关于使用Django随机获取记录的讨论。主要意思是说 Python Record.objects.order_by('?')...举个栗子,这里是MYSQL是如何处理这个查询的(其他数据库的情况也差不多),想象一下当一个表有十亿的时候会怎样: 为了完成ORDER BY RAND() ,需要一个RAND()列来排序 为了有RAND...想象一下如果你有十亿的数据。你是打算把它存储一个有百万元素的list中,还是愿意一个一个的query?...附上三种方法数据量SQL时间/总时间的数据图表: 最后总结,Django下,使用mysql数据库,数据量百万级以下时,使用 Python Record.objects.order_by('?')

7K31

除了增删改查你对MySQL还了解多少?

TCP/IP 我们实际使用数据库的过程中,大概率服务器客户端不会在一台机器上,那么他们之间就得通过网络来通信,MySQL采用TCP作为服务器客户端之间的网络通信协议。...,表之间的连接顺序是啥样的,我们可以通过EXPLAIN语句来设置执行计划; MySQL中走与不走索引的情况汇总 MySQL中,并不是你建立了索引,并且你SQL中使用到了该列,MySQL就肯定会使用到那些索引的...BY操作中,排序的列同时也WHERE中时,MYSQL将无法使用索引; MySQL索引通常是被用于提高WHERE条件的数据匹配或者执行联结操作时匹配其它表的数据的搜索速度。...LIMIT 1000000, 30 的意思是:扫描满足条件的1000030,扔掉前面的1000000,然后返回最后的30。...首先,数据库的数据存储并不是像我们想象中那样,按表按顺序存储数据,一方面是因为计算机存储本身就是随机读写,另一方面是因为数据的操作有很大的随机性,即使一开始数据的存储是有序的,经过一系列的增删查改之后也会变得凌乱不堪

70330
您找到你想要的搜索结果了吗?
是的
没有找到

mysql中走与不走索引的情况汇集(待全量实验)

' -- 虽然b是数字类型,'1'比较依然走索引 但是,无论如何,这种额外的隐式类型转换都是开销,而且由于有字符和数字比就不走索引的情况,故建议避免一切隐式类型转换 尽量避免 OR 操作 select...BY操作中,排序的列同时也WHERE中时,MYSQL将无法使用索引; MySQL索引通常是被用于提高WHERE条件的数据匹配或者执行联结操作时匹配其它表的数据的搜索速度。...LIMIT 1000000, 30 的意思是:扫描满足条件的1000030,扔掉前面的1000000,然后返回最后的30。...以下是两条查询语句,都是取10条数据,但性能就相去甚远 所以不能简单的使用 limit 语句实现数据分页。 探究 为什么 offset 偏大之后 limit 查找会变慢?...首先,数据库的数据存储并不是像我们想象中那样,按表按顺序存储数据,一方面是因为计算机存储本身就是随机读写,另一方面是因为数据的操作有很大的随机性,即使一开始数据的存储是有序的,经过一系列的增删查改之后也会变得凌乱不堪

11.3K54

网易云音乐歌曲评论爬虫(附源码)

","csrf_token":""} offsetlimit是必选参数,其他参数是可选的,其他参数不影响data数据的生成,offset (页面偏移量) = (页数-1) * 20, 注意limit最大值为...-1) * 20 msg = '{"offset":' + str(offset) + ',"total":"True","limit":"20","csrf_token":""}' 接下来,我们来看一下...最后就是获取那两个加密参数: # 获取参数 def get_params(page): # msg也可以写成msg = {"offset":"页面偏移量=(页数-1) * 20", "limit...":"20"},offsetlimit这两个参数必须有(js) # limit最大值为100,当设为100时,获取第二页时,默认前一页是20个评论,也就是说第二页最新评论有80个,有20个是第一页显示的...# 偏移量 offset = (page-1) * 20 # offsetlimit是必选参数,其他参数是可选的,其他参数不影响data数据的生成,最好还是保留 msg

1.8K21

01-03章 检索排序数据第1章 了解SQL第2章 检索数据第3章

表的特性定义数据表中如何存储,存储哪类数据,数据如何分解,各部分信息如何命名等。 模式(schema)用来描述数据库中特定的表,也可以用来描述整个数据库(其中表的关系)。...LIMIT 指定返回的行数。 LIMIT 带的 OFFSET 指定从哪儿开始。 例子中,Products表只有 9 种产品,所以 LIMIT 5 OFFSET 5 只返回 4 行数据。 ?...因此,LIMIT 1 OFFSET 1 会检索 1 ,从第 2 开始。...MySQL、MariaDB SQLite 支持简化版 LIMIT 4 OFFSET 3 语句,即 LIMIT 3,4 使用此语法,逗号之前的值对应 OFFSET,逗号之后的值对应 LIMIT。...2.7 使用注释 SQL 语句是由 DBMS 处理的指令。如果希望包括不进行处理执行的文本,应使用注释。

2.6K10

一次线上MySQL分页事故,搞了半夜...

order=condition&orderType=desc&offset=1800000&limit=500 domain、module method 都是化名,代表接口的域、模块实例方法名,后面的...offset limit 代表分页操作的偏移量每页的数量,也就是说该同学是翻第(1800000/500+1=3601)页。... 4800000,1)  order by a.id limit 25;  受影响的: 0  时间: 1.541s   ②起始位置重定义 记住上次查找结果的主键位置,避免使用偏移量 offset:  ...这种延迟加载会保证数据不会跳跃着获取。 ③降级策略 看了网上一个阿里的 DBA 同学分享的方案:配置 limit 的偏移量获取数一个最大值,超过这个最大值,就返回空数据。...小结 当晚我们应用上述第三个方案,对 offset 做一下限流,超过某个值,就返回空值。第二天使用第一种第二种配合使用的方案对程序和数据库脚本进一步做了优化。

33820

一次深夜优化 MySQL 亿级数据分页的奇妙经历!

order=condition&orderType=desc&offset=1800000&limit=500 domain、module method 都是化名,代表接口的域、模块实例方法名,后面的...offsetlimit代表分页操作的偏移量每页的数量,也就是说该同学是 翻第(1800000/500+1=3601)页。...4800000,1) order by a.id limit 25; 受影响的: 0 时间: 1.541s 起始位置重定义 记住上次查找结果的主键位置,避免使用偏移量 offset /*记住了上次的分页的最后一条数据的...这种延迟加载会保证数据不会跳跃着获取。 降级策略 看了网上一个阿里的dba同学分享的方案:配置limit的偏移量获取数一个最大值,超过这个最大值,就返回空数据。...06 小结 当晚我们应用上述第三个方案,对offset做一下限流,超过某个值,就返回空值。第二天使用第一种第二种配合使用的方案对程序和数据库脚本进一步做了优化。

33120

MySQL 亿级数据分页的优化

order=condition&orderType=desc&offset=1800000&limit=500 domain、module method 都是化名,代表接口的域、模块实例方法名,后面的...offsetlimit代表分页操作的偏移量每页的数量,也就是说该同学是 翻第(1800000/500+1=3601)页。...null, comn decimal(7,2) not null, depno mediumint unsigned not null default 0 ); 2、创建两个函数:生成随机字符串随机编号...4800000,1) order by a.id limit 25; 受影响的: 0 时间: 1.541s 2、起始位置重定义 记住上次查找结果的主键位置,避免使用偏移量 offset /*记住了上次的分页的最后一条数据的...这种延迟加载会保证数据不会跳跃着获取。 3、降级策略 看了网上一个阿里的dba同学分享的方案:配置limit的偏移量获取数一个最大值,超过这个最大值,就返回空数据。

76520

MySQL DQL 数据查询

WHERE 分组聚集计算之前选取输入行(因此,它控制哪些行进入聚集计算),而 HAVING 分组聚集之后选取分组。...如果希望按照降序排序,可以使用 DESC(descend)关键字,随机使用随机数函数RAND()。 指定待排序的列时,不建议使用列位置(从1开始),因为该语法已从SQL标准中删除。...[LIMIT {[offset,] row_count | row_count OFFSET offset}] LIMIT 接受一个或两个数值参数。参数必须是一个整数常量。...offset,row_count # 或 row_count OFFSET offset offset 为返回记录的开始偏移量,从 0 开始,row_count 为返回记录的最大数目。...通过使用 EXPLAIN 命令,可以了解 MySQL 是如何执行查询的,包括使用的索引、连接类型、扫描的行数等。

20620

别再用OFFSETLIMIT分页了

Slack、Shopify Mixmax 这些公司都在用我们今天将要讨论的方式进行分页。 我想你很难找出一个不使用 OFFSET LIMIT 进行数据库分页的人。...如果你想从头开始构建一个可靠且高效的系统,一开始就要把它做好。 今天我们将探讨已经被广泛使用的分页方式存在的问题,以及如何实现高性能分页。 1OFFSET LIMIT 有什么问题?...这意味着,如果你有 1 亿个用户,OFFSET 是 5 千万,那么它需要获取所有这些记录 (包括那么多根本不需要的数据),将它们放入内存,然后获取 LIMIT 指定的 20 条结果。...也就是说,为了获取一页的数据: 10万中的第5万到第5万零20 需要先获取 5 万。这么做是多么低效?...我建议需要分页的表中使用自动递增的主键,即使只是为了分页。

1K20

求求你别再用 MySQL offset limit 分页了?

Slack、Shopify Mixmax 这些公司都在用我们今天将要讨论的方式进行分页。 我想你很难找出一个不使用 OFFSET LIMIT 进行数据库分页的人。...如果你想从头开始构建一个可靠且高效的系统,一开始就要把它做好。 今天我们将探讨已经被广泛使用的分页方式存在的问题,以及如何实现高性能分页。 1、OFFSET LIMIT 有什么问题?...这意味着,如果你有 1 亿个用户,OFFSET 是 5 千万,那么它需要获取所有这些记录 (包括那么多根本不需要的数据),将它们放入内存,然后获取 LIMIT 指定的 20 条结果。...也就是说,为了获取一页的数据: 10万中的第5万到第5万零20 需要先获取 5 万。这么做是多么低效?...你要在本地保存上一次接收到的主键 (通常是一个 ID) LIMIT,而不是 OFFSET LIMIT,那么每一次的查询可能都与此类似。 为什么?

5.1K10

分页使用 OFFSET LIMIT 会有什么问题?

Slack、Shopify Mixmax 这些公司都在用我们今天将要讨论的方式进行分页。 我想你很难找出一个不使用 OFFSET LIMIT 进行数据库分页的人。...如果你想从头开始构建一个可靠且高效的系统,一开始就要把它做好。 今天我们将探讨已经被广泛使用的分页方式存在的问题,以及如何实现高性能分页。 1、OFFSET LIMIT 有什么问题?...这意味着,如果你有 1 亿个用户,OFFSET 是 5 千万,那么它需要获取所有这些记录 (包括那么多根本不需要的数据),将它们放入内存,然后获取 LIMIT 指定的 20 条结果。...也就是说,为了获取一页的数据: 10万中的第5万到第5万零20 需要先获取 5 万。这么做是多么低效?...我建议需要分页的表中使用自动递增的主键,即使只是为了分页。

63420

求求你不要再用offsetlimit

Slack、Shopify Mixmax 这些公司都在用我们今天将要讨论的方式进行分页。 我想你很难找出一个不使用 OFFSET LIMIT 进行数据库分页的人。...如果你想从头开始构建一个可靠且高效的系统,一开始就要把它做好。 今天我们将探讨已经被广泛使用的分页方式存在的问题,以及如何实现高性能分页。 1....OFFSETLIMIT有什么问题 正如我们在上几段中简要探讨的那样,OFFSETLIMIT非常适用于数据使用量很少的项目。...这意味着,如果你有 1 亿个用户,OFFSET 是 5 千万,那么它需要获取所有这些记录 (包括那么多根本不需要的数据),将它们放入内存,然后获取 LIMIT 指定的 20 条结果。...你应该存储最后收到的主键(通常是一个ID)LIMIT,而不是本地存储当前的OFFSETLIMIT并随每个请求传递它,因此查询最终可能与此类似。 为什么?

1.2K00

Hive优化器原理与源码解析系列--优化规则SortRemoveRule(一)

但现在大部分成熟的数据库优化器都是两种优化器结合起来使用,这样做为了优化器执行计划Plan的构建速度准确性之间找到一个好的平衡点。...,根据成本模型统计信息算法(Calcite使用的是动态规划算法),从等价关系表达式集合,构建出成本最优执行计划。...往期的文章有讲一个SQL解析过程,那么这里再简单讲述CBO优化器如何对一个SQL使用优化规则Rule,进行优化的。...RexNode offset返回记录数前,指定需要丢弃记录数的表达式。 RexNode fetch 指定获取记录数表达式。 例如,员工信息表employe总记录数1000条。...但是又不需要返回输出全部结果, 就可以SQL语句中使用SORT LIMIT从句。

43710

别再用 offset limit 分页了,性能太差!

Slack、Shopify Mixmax 这些公司都在用我们今天将要讨论的方式进行分页。 我想你很难找出一个不使用 OFFSET LIMIT 进行数据库分页的人。...如果你想从头开始构建一个可靠且高效的系统,一开始就要把它做好。 今天我们将探讨已经被广泛使用的分页方式存在的问题,以及如何实现高性能分页。 1、OFFSET LIMIT 有什么问题?...这意味着,如果你有 1 亿个用户,OFFSET 是 5 千万,那么它需要获取所有这些记录 (包括那么多根本不需要的数据),将它们放入内存,然后获取 LIMIT 指定的 20 条结果。...也就是说,为了获取一页的数据: 10万中的第5万到第5万零20 需要先获取 5 万。这么做是多么低效?...你要在本地保存上一次接收到的主键 (通常是一个 ID) LIMIT,而不是 OFFSET LIMIT,那么每一次的查询可能都与此类似。 为什么?

20910

别再用 offset limit 分页了,性能太差!

Slack、Shopify Mixmax 这些公司都在用我们今天将要讨论的方式进行分页。 我想你很难找出一个不使用 OFFSET LIMIT 进行数据库分页的人。...如果你想从头开始构建一个可靠且高效的系统,一开始就要把它做好。 今天我们将探讨已经被广泛使用的分页方式存在的问题,以及如何实现高性能分页。 1.OFFSET LIMIT 有什么问题?...这意味着,如果你有 1 亿个用户,OFFSET 是 5 千万,那么它需要获取所有这些记录 (包括那么多根本不需要的数据),将它们放入内存,然后获取 LIMIT 指定的 20 条结果。...你要在本地保存上一次接收到的主键 (通常是一个 ID) LIMIT,而不是 OFFSET LIMIT,那么每一次的查询可能都与此类似。 为什么?...我建议需要分页的表中使用自动递增的主键,即使只是为了分页。

43210

同事乱用分页 MySQL 卡爆,我真是醉了...

order=condition&orderType=desc&offset=1800000&limit=500 domain、module method 都是化名,代表接口的域、模块实例方法名,...后面的offsetlimit代表分页操作的偏移量每页的数量,也就是说该同学是 翻第(1800000/500+1=3601)页。...comn decimal(7,2) not null, 21 depno mediumint unsigned not null default 0 22 ); 2、创建两个函数:生成随机字符串随机编号...4800000,1) 13 order by a.id limit 25; 14 受影响的: 0 15 时间: 1.541s 2、起始位置重定义 记住上次查找结果的主键位置,避免使用偏移量 offset...这种延迟加载会保证数据不会跳跃着获取。 3、降级策略 看了网上一个阿里的dba同学分享的方案:配置limit的偏移量获取数一个最大值,超过这个最大值,就返回空数据。

36930

Java小白学习MyBatis:Mybatis 是如何进行分页的?

MyBatis 是一种持久层框架,支持通过配置文件注解将 SQL 映射为 Java 对象。实际开发中,查询数据时经常需要进行分页处理。...MyBatis 也提供了支持分页的方案,其主要思路是使用 Limit 偏移量限制个数,来获取指定数量的数据。下面将会介绍 MyBatis 如何进行分页。...下面我们将分别介绍这两种方式: 1、基于参数改造: 第一种分页方式是基于参数改造的,通过添加参数 limit offset 就可以实现查询从某个位置开始的若干条记录,代码实现如下: <select...#{limit} OFFSET #{offset} 这段 SQL 语句会返回从偏移量为 offset 的位置开始的 limit 条结果。...例如:LIMIT 30,10 表示从第 31 开始返回 10 结果。 实际应用中,我们可以将 limit offset 抽取成两个参数,并传入到 MyBatis 中。

24720
领券