当前位置:首页 > 日记 > 正文

百万级数据分页查询优化方案

百万级数据分页查询优化方案
当有成千上万的记录需要从数据库中查询时,所有查询都会变慢,特别是随着数据量的增加,数据库分页查询的方法和优化点有很多。

死的工作

为了测试下面列出的一些优化,请解释下表。

表格名称:order_history

描述:一个企业的订单历史表

主要研究领域:unsigned int ID字段(4)int类型

现场情况:表包含37个领域,其中不包含大型阵列,如文本,最大为varchar(500),ID字段的索引,并增加。

数据量:5709294

MySQL版本:5.7.16

在线下找到一百万级测试板是不容易的。如果需要自己的测试,可以编写shell脚本的插入数据来测试它。

下列SQL语句的环境不会改变,下面是基本的测试结果:

select count(*)从orders_history;
返回结果:5709294

三次查询如下:
8903毫秒
8323毫秒
8401毫秒
一般的分页查询

一个简单的分页查询可以使用一个简单的限制子句实现:

SELECT * FROM表限排{抵消抵消| }。
限制子句可以用来指定SELECT语句返回的记录数:

第一个参数指定记录行的第一个返回行的偏移量。

第二个参数指定返回记录行的最大行数。
如果只给出一个参数:它表示返回的最大记录数。

第二个参数是1,表示所有记录的检索从一个偏移到记录集的结束

初始记录行的偏移量为0(而不是1)。
下面是一个应用示例:

SELECT * FROM orders_history类型= 8的限制1000,10;
这个语句将查询10件后第一千件从表orders_history,即数据的数据,第一千零一到第一万零一十。

数据表中的记录默认情况下使用主键(一般ID),这与:

SELECT * FROM orders_history类型= 8阶的身份限制10000,10;
三次查询如下:
3040毫秒
3063毫秒
3018毫秒
对于这种类型的查询,以下测试查询记录数量对时间的影响:
SELECT * FROM orders_history类型= 8的限制10000,1;
SELECT * FROM orders_history类型= 8的限制10000,10;
SELECT * FROM orders_history类型= 8限10000100;
SELECT * FROM orders_history类型= 8限100001000;
SELECT * FROM orders_history类型= 8限1000010000;
三个查询时间如下:
1记录查询:3072ms 3092ms 3002ms
10记录查询:3081ms 3077ms 3032ms
100记录查询:3118ms 3200ms 3128ms
1000记录查询:3412ms 3468ms 3394ms
10000记录查询:3749ms 3802ms 3696ms
此外,我还做了十个查询。从查询时间,我们基本上可以确认当查询量小于100时,查询时间没有差别。随着查询记录数量的增加,将花费更多的时间。

查询偏移测试:
SELECT * FROM orders_history类型= 8限100100;
SELECT * FROM orders_history类型= 8限1000100;
SELECT * FROM orders_history类型= 8限10000100;
SELECT * FROM orders_history类型= 8限100000100;
SELECT * FROM orders_history类型= 8限1000000100;
三个查询时间如下:
Query 100 offset: 25ms 24ms 24ms
查询1000:78ms 76ms 77ms偏移
查询10000:3092ms 3212ms 3128ms偏移
查询100000:3878ms 3812ms 3798ms偏移
查询1000000:14608ms 14062ms 14700ms偏移
随着查询偏移量的增加,查询时间急剧增加,特别是查询偏移量大于10万之后。

这个分页查询将从数据库的第一个记录开始扫描,因此查询速度越慢,查询数据越多,查询速度就越慢。

使用子查询优化

这是一种定位偏移位置ID,然后返回的方法,它适用于ID增加的情况。
SELECT * FROM orders_history类型= 8的限制100000,1;

选择ID从orders_history哪里类型= 8的限制100000,1;

SELECT * FROM orders_history类型= 8
ID > =(选择ID从orders_history类型= 8的限制100000,1)
限制100;

SELECT * FROM orders_history类型= 8限100000100;

4语句的查询时间如下所示:
首先声明:3674ms
第二1315ms声明:
第三声明:1327ms
第四声明:3710ms
应该注意上面的查询:

比较第一个语句和第二个语句:使用选择ID而不是选择*的速度增加了3倍。

比较第二个语句和第三个语句:不同速度差的几十毫秒。

比较第三个语句和第四个语句:由于选择ID的速度增加,第三个语句的速度增加了3倍。

这种方法比原始的一般查询方法快几倍。

使用ID限制优化

这样,我们假设数据表的ID不断增加。我们可以根据查询的数量和查询的数量来计算查询ID的范围。我们可以在查询和查询之间使用id。
SELECT * FROM orders_history类型= 2和ID 1000000和1000100限制在100;
查询时间:15ms 12ms 9ms

这种查询方法可以极大地优化查询速度,并且可以在几毫秒内完成。然而,通常在构建表时,会添加基本id字段,这将导致许多遍历到分页查询。

还有另一种写作方式:

SELECT * FROM orders_history其中ID > = 1000001限100;
当然,您也可以使用入到查询的方式,该查询常常用于在多个表连接时查询,并通过使用其他表查询的ID集进行查询。
SELECT * FROM orders_history在ID(选择order_id从trade_2商品=商品=)= 100;
查询中应该注意到:一些MySQL版本不支持子句中的限制用法。

使用临时表优化

这种方式不属于查询优化,这里是一个提及。

为了限制ID优化的使用问题,需要身份证是不断增加的,但在某些情况下,如使用历史表时,或数据丢失的问题,可以考虑使用临时存储表记录ID的页面,使用页面ID查询。这可以大大改善传统的分页查询速度,特别是当数据量上千万。

数据表的id描述

通常,在数据库中设置表时,必须为每个表添加ID增量,这样便于查询。

如果订单像一个数据库,数据非常大,一般都会被分割表,此时不推荐使用数据库的ID作为唯一的标识,但它应该由分布式高并发唯一ID生成器生成,并在数据表中存储另一个独特的字段。

使用第一个范围查询来定位ID(或索引),然后使用索引定位数据,可以提高查询速度几次,即,首先选择ID,然后选择*;

相关文章

PS图象处理软件图年轻漂亮的矢量美

PS图象处理软件图年轻漂亮的矢量美

矢量,图象,处理软件,年轻漂亮,天使,先看最后的结果: Ugee has made 2 tools: PHOTOSHOP digital plate 1, a new layer to draw a draft, and then in a new layer, to smooth and clean the final line draft requirement. 2、在联机文稿…

2006最后推出的Longhorn

2006最后推出的Longhorn

推出,电脑软件,Longhorn,今天,微软宣布,万众期待的Windows操作系统Longhorn将在2006发布,其关键部件的Windows winfxtm开发平台也将被移植到Windows XP和Windows Server 2003。 2006推出的Longhorn会给用户带来很多的改进服务,保护和可靠性。这…

PS图象处理软件制作了一个惊人的火

PS图象处理软件制作了一个惊人的火

文字,图象,处理软件,火焰,惊人,字的火焰是一个PS图象处理软件的经典教程,本教程主要是使用PS图象处理软件和一些材料合成火焰文字燃烧的影响。我们尝试使用真正的火焰图片加滤镜和混合模式来产生不同的火焰效果。 第一步是一个合适的尺寸和…

在Excel2007文件中插入特殊符号

在Excel2007文件中插入特殊符号

特殊符号,文件,电脑软件,没有特殊符号插入Excel的功能,但事实上在很多地方已经使用了一些特殊的符号,如大括号{;和;;};permil;和千分号;以及如何去做,事实上,有以下的提示,你会感到很轻松,在细胞需要输入特殊符号在新闻只要Alt+数字01230125你可以得到…

Outlook接收邮件和死亡

Outlook接收邮件和死亡

死亡,接收邮件,电脑软件,Outlook,有一次,我发了一封电子邮件,突然关上电源,然后打开Outlook,很快就死了。谢谢您. 在Outlook中每个邮箱由两部分组成,一是数据索引文件,另一个是邮件的内容。当Outlook启动时,它读取相应的邮件的第一指标,当指标数据…

excel文件菜单及相关功能灰不可用

excel文件菜单及相关功能灰不可用

文件,菜单,不可用,功能,电脑软件,当我们使用excel时,我们发现,文件菜单下,新的打开,保存,打印文件等等,所有的功能都是灰色的,不能正常使用,怎么会这样呢 我们知道,对于计算机来说,所有的更改都应该被保存,计算机不会自动记住用户在没有保存的情况下…

锁定Excel表中的多个指定单元格

锁定Excel表中的多个指定单元格

锁定,多个,单元格,电脑软件,Excel,对于Excel工作簿中的数据,如果我们想查看它而不是修改它,那么这将是一个非常简单实用的向工作簿添加密码的方法。在实际应用中,我们在Excel工作簿中指定的单元格中保护数据,但同时,我们必须允许其他人修改其他…

PS图象处理软件让世界末日灾难

PS图象处理软件让世界末日灾难

图象,末日,处理软件,灾难,世界,在这节课中,我将向您展示如何使用调整图层的矢量蒙版,和一些特殊效果创建一个艺术作品,预示着灾难。让我们从现在开始。 在这节课中,我们将用大量的照片来创建最终的图像。一些照片在下面的图片所示。他们可以在…

快速删除Excel中的重复内容

快速删除Excel中的重复内容

删除,快速,内容,电脑软件,Excel,问:我女朋友在一家公司的会计部门没有学到任何东西,但他们学的很少。例如,他们经常收集一些数据,其中一些数据是重复的。我女朋友的任务是找到重复的条目并删除它们。你有一个简单而有效的方法吗 答:实践都是这…

PS图象处理软件只是增加了光与影的

PS图象处理软件只是增加了光与影的

照片,图象,处理软件,增加了,光与影,图片上添加了一些钢笔,照片可以添加到蛋糕中。效果图原件。 新建一层,前景颜色为白色,用矩形框涂上一层,然后再打两到三像素,然后打开其外发光层样式选择,然后用透明的橡皮擦,在适当的地方擦去闪烁效果: 然后复…

定义Excel单元格区域的名称

定义Excel单元格区域的名称

区域,单元格,定义,名称,电脑软件,工作簿包含大量公式,其中单元格区域的定义最混乱。在公式中,我们可以用名称代替数字和符号来定义单元格区域,这样公式就更容易理解和维护。 在功能区选项卡;公式;定义名称组中,单击;;定义名称;在新名称对话框;;;名称;名…

PS图象处理软件给的照片夜空中的星

PS图象处理软件给的照片夜空中的星

星光,照片,图象,处理软件,夜空,PS图象处理软件的后处理是一种方法,使照片更美丽。不同的照片材料适合不同的制作方法,我们需要选择正确的处理方法,在这种情况下,我们把MM的图片变成暗色调,然后添加一个闪闪发光的明星效果,使作品更加迷人。 处理…