MySQL分页优化(MySQL1000万快速分页)

MySQL分页优化(MySQL1000万快速分页)
这是我的一点经验。

当你开始学习SQL时,你可以写这个
复制代码代码如下所示:
从表顺序按ID限制1000, 10选择*;

但是当数据达到一百万级时,它就会慢慢死去。
复制代码代码如下所示:
从表顺序按ID限制1000000, 10选择*;

可能需要几十秒钟。

互联网上的许多优化方法都是这样的。
复制代码代码如下所示:
从表中选择id(从表限制> = 1000000, 1选择id)限制为10;

是的,速度是0秒。看起来没问题。
但还不够完美!

以下句子是完美的!
复制代码代码如下所示:
从id为1000000和1000010之间的表中选择*;

比那个快5到10倍。

另外,如果需要查询ID不是一个连续的周期,最好的方法是找出ID,然后在查询中使用。
复制代码代码如下所示:
从表中选择*(10000, 100000, 1000000…);
多分享一点
当一个长字符串查询一个字段时,一个表被设计为在字段中添加一个字段,例如,存储URL的字段。
查询时,不能直接查询字符串,效率低,应检查字符串的CRC32、MD5

如何优化MySQL的几万个快速分页

限制1111的数据执行一些性能问题,并通过各种方法使用id XX使用索引> =,这样Id就可以快速地通过。杰克
MySQL限制分页慢解决方案(MySQL限制优化,百万到1000万记录实现快速分页)

MySQL的性能有多高用了半年多的时间,真的很难去思考这个问题或者一天的开始!mysql数据库绝对适合DBA类专家玩。一般来说,如何编写1万新闻的小新闻系统,可以应用XX框架实现快速发展,但数据量是10万,几百万到几百万,他的表现是否如此之高一个小小的错误,可能会导致整个系统的重写,更使这个系统无法正常运行!好吧,不要废话了,说些事实,看看例子吧:
数据表(ID、标题、信息收集、Vtype)是4个领域,其中标题的长度是固定的,信息是文本,ID是渐进的,Vtype是tinyint和ID指数。这是一个简单的消息系统的基本模型。现在填写的数据和填写10万新闻。
最后,收集是一个10万的记录,和数据库表占用的硬盘1.6g.ok,看下面的SQL语句:

选择ID,从收集的限制1000,10称号;快速;基本确定在0.01秒,然后看下面的
选择ID,从收集的限制90000,10称号;从9万,寻呼和结果
8-9秒完成,我的神哪一个是问题事实上,有必要对数据进行优化并在因特网上找到答案:
选择ID的ID限制90000,10收集订单;很快,0.04秒就可以了。为什么因为使用id键来索引是很快的:
从ID(=)中选择ID、标题(从收集顺序中选择ID);
这是使用id来索引的结果。但是问题太复杂了,完成了。请看下面的语句
选择ID从收集在V型= 1阶的身份限制90000,10;很慢,8-9秒!
在这里,我相信很多人都会像我一样,有一种崩溃的感觉!Vtype已编入索引。怎么能慢V型指数是好的,你直接选择ID从收集在V型= 1的限制1000,10;很快,基本上0.05秒,但是增加了90倍,从9万,这是0.05 * 90 = 4.5秒的速度,测试结果是8-9秒一个量级。从这里,有些人提出了分表的思想,这是不#因为论坛同样的想法。以下思路如下:
建立一个索引表:T(ID、标题、V型)并将它设置为一个固定长度的,然后做一个页面,页面的结果,然后去收集到的信息是可行的吗我在实验中知道的。
10万是记录在T(ID、标题、V型)和数据表的大小约为20m.use
选择ID从T,V型= 1阶的身份限制90000,10;很快,基本上0.1-0.2秒跑了。为什么是这样我想这是因为有太多的收集数据,所以寻呼要跑很长的路。限制是对数据表的大小完全相关。事实上,这是一个全表扫描,只是因为数据量很小,只有10万是fast.ok,得到一个疯狂的实验,加100万、测试性能。
10倍的数据,T台立即去超过200米,它的长度是固定的。或是查询语句,时间是0.1-0.2秒完成!的子表的性能是没有问题的。错 uff01because我们的极限是9万,所以很快。给我一个大的,90万的开始
选择ID从T,V型= 1阶的身份限制900000,10;看结果,时间为1-2秒!
为什么还是这么长时间,很郁闷!有人说长会提高性能极限,我也认为,因为一个记录长度是固定的,MySQL应该在90万个位置可以计算吗但是我们高估了MySQL的智能,他不是一个商业数据库,固定长度和不确定长度对限制的影响很小。难怪有人说Discuz将缓慢向100万的记录,我相信这是真的,这是数据库设计的相关!
MySQL不能突破100万的限制吗100万分页是极限吗
答案是:不!!!为什么不能突破100万,因为它不设计MySQL!100万个记录,和10G数据库,如何快速分页!
好了,我们回去收集测试表,测试得出的结论是:30万,用分表法是可行的,会慢得站不住你30万比他快!当然,如果使用子表+这个方法,它是绝对完美的,但是当我使用这种方法时,没有子刻度就可以很好地解决这个问题。
答案是:综合指数!当设计了其中一个MySQL索引时,可以无意地发现索引名,并且可以选择几个字段来输入索引。这个有什么用开始选择ID的ID限制90000,10收集秩序;它是如此之快,指标的话,但是如果你把它将不会被索引。增加一个索引搜索(V型、ID)与一试的想法。然后测试
选择ID从收集在V型= 1的限制90000,10;很快!完成0.04秒!
复试:选择ID,从收集在V型= 1的限制90000,10称号;很遗憾,8-9秒,没有搜索指数!
复试:搜索(ID、V型),或选择ID,这也是非常令人遗憾,0.5秒。
总结:如果有条件,要使用限制订阅,你必须设计一个索引,将放在第一个,限制使用第二个,只把主键,选择键!
分页问题的完美解决方案。如果您能快速返回id,您需要优化限制。按照这一逻辑,数以百万计的极限应0.0x秒完成。看来,MySQL语句的优化,索引是非常重要的。
那么,回到最初的问题,我们如何能把上述研究成功应用到快速发展上呢如果你使用一个复合查询,我的轻量级框架将不会被使用。分页字符串必须是你自己写的。多少钱下面是一个例子,这个想法出来了。
SELECT * FROM收集在ID(9000,12507000);它可以检查出0秒!
天哪,MySQL的指数同样有效的陈述!看来在网上不能以错误的方式编入索引!
有了这个结论,它可以很容易地应用到轻量级框架中。

代码如下:
复制代码代码如下所示:
美元dblink分贝=();
DB -> PageSize = 20美元;
为SQL = id从收集在V型= $ V型;
$ DB >执行($ SQL);
($ strpage = $数据库-> strpage); / /分页存储在临时变量的字符串,方便输出
而(RS =美元美元DB -> fetch_array()){
跨过美元。= $ RS { 'id' }。';
}
跨过美元= substr(合折叠,0,strlen($斯特里德)- 1); / / ID字符串结构
为数据库-> PageSize = 0; / /是关键,在消除阶级的情况下,页面是空的,只需要一个数据库连接,不需要打开;
为数据库->执行(选择ID、标题、网址、时间、gtime,Vtype,标签从收集的地方);
fetch_array()):>

目标= _blank >

< PHP
echo $ strpage;

通过一个简单的转换,这个想法很简单:1)通过优化索引,找到id,然后拼写一个类似于1239000012000 2的字符串来查询结果。
一个小的索引加上少量的更改允许MySQL支持一百万或一百万级高效分页!
从这里的例子中,我想到了一点:对于大型系统,PHP不能使用框架,尤其是SQL语句无法看到的框架!因为我轻量级框架的开始几乎崩溃了!对于小型应用程序的快速发展,没有ERP、OA、大型Web站点和数据层(包括逻辑层)的框架。如果程序员失去对SQL语句的控制,项目的风险将以几何级数增加!特别是,当MySQL被使用时,MySQL必须需要一个专业的DBA来完成其最佳性能!
PS:经过实际测试,100万的数据,160万个数据表,15G,190m指数,即使指数,限制需要0.49秒。所以分页是最好不要让别人

tag:分页优化快速电脑软件mysql

相关内容