用MySQL优化限制查询语句的5种方法
1。子查询优化方法
首先查找第一个数据,然后与数据相等的id是要获取的数据。
缺点:数据必须是连续的。可以说没有地方条件。其中条件将过滤数据并导致数据失去连续性。
复制代码代码如下所示:
设置分析= 1;
查询OK,0行受影响(0秒)
从成员中选择计数(*);
---------- + +
|计数(*)|
---------- + +
169566 | |
---------- + +
1行集(0秒)
传呼机- grep MySQL >!
bp机to'grep ~ --!
从成员限制10, 100选择*;
100行(0秒)
MySQL >选择*从成员MemberID(选择memberid成员限制> = 10,1)极限100;
100行(0秒)
从成员限制1000, 100选择*;
100行(0.01秒)
MySQL >选择*从成员MemberID(选择memberid成员限制> = 1000,1)极限100;
100行(0秒)
从成员限制100000, 100选择*;
100行(0.10秒)
MySQL >选择*从成员MemberID(选择memberid成员限制> = 100000,1)极限100;
100行(0.02秒)
nopager MySQL >
传呼机设置标准
显示配置文件
*************************** 1。行***************************
query_id:1
持续时间:0.00003300
查询:从成员中选择计数(*)
*************************** 2。行***************************
query_id:2
持续时间:0.00167000
查询:从成员限制10, 100中选择*
*************************** 3。行***************************
query_id:3
持续时间:0.00112400
查询:查询会员MemberID(选择memberid成员限制> = 10,1)极限100
*************************** 4。行***************************
query_id:4
持续时间:0.00263200
查询:从成员限制1000, 100中选择*
*************************** 5。行***************************
query_id:5
持续时间:0.00134000
查询:查询会员MemberID(选择memberid成员限制> = 1000,1)极限100
*************************** 6。行***************************
query_id:6
持续时间:0.09956700
查询:从成员限制100000, 100中选择*
*************************** 7。行***************************
query_id:7
持续时间:0.02447700
查询:查询会员MemberID(选择memberid成员限制> = 100000,1)极限100
结果表明,当偏移量大于1000时,子查询方法能有效地提高性能。
2。倒排表优化法
倒表方法类似于建立索引,使用表来维护页面数量,然后通过有效连接获取数据。
缺点:只适用于固定数量的数据,数据不能删除,页面表维护困难。
倒排表被引入:(反向索引被称为搜索引擎的基石)。
倒排表是一个倒排索引,存储在内存中,可以添加到一个倒排记录中。
临时倒排文件是一个倒排索引,它存储在磁盘中,不能以不可添加到记录的文件形式存储。临时倒排文件是中等规模的倒排索引。
最后一个倒排文件是指以文件的形式以文件的形式存储的临时倒排文件的倒排索引,最后的倒排文件是一个大的倒排索引。
倒排索引是一个抽象概念,倒排表、临时倒排文件和最终倒排文件是倒排索引的三种不同形式。
三.反向查找优化方法
当偏移量超过记录的一半时,首先使用该顺序,以便偏移量被反转。
缺点:为了优化是相当麻烦的。增加指标和指标对数据修改的效率,并知道总记录数,偏移量大于一半的数据。
极限偏差算法:
前向查找:(当前页- 1)*页长度
反向查找:总记录当前页长度
做实验看看表演是怎样的
记录总数:1628775
每页记录数:40
页面总数:1628775 40=40720
中间页数:40720 2=20360
第二万一千页
正向查找SQL:
复制代码代码如下:SELECT * FROM ` ABC `哪里` batchid ` = 123限839960, 40
时间:1.8696秒
反向查找SQL:
复制代码代码如下:SELECT * FROM ` ABC `哪里` batchid ` = 123阶的inputdate DESC LIMIT 788775, 40
时间:1.8336秒
第三万页
正向查找SQL:
复制代码代码如下:SELECT * FROM ` ABC `哪里` batchid ` = 123限1199960, 40
时间:2.6493秒
反向查找SQL:
复制代码代码如下:SELECT * FROM ` ABC `哪里` batchid ` = 123阶的inputdate DESC LIMIT 428775, 40
时间:1.0035秒
注意,反向查找结果是降序降序,和InputDate是记录的插入时间,并且还可以结合的关键,但它不方便。
4.limit约束优化方法
极限偏移限制低于某个数字。这个数字等于没有数据,我记得阿里巴巴的DBA说他们这样做了。
5。搜索索引的方法
限制MySQL的工作原理是读取记录,然后抛弃了之前,我想读的,所以高性能会更糟。
预优化SQL:
复制代码如下:SELECT * FROM的last_active极限50,5成员顺序
优化的SQL语句:
复制代码代码如下:SELECT * FROM内部成员加入(选择member_id由last_active 50, 5成员的顺序)
不同的是,优化前需要更多的我/ O废物的SQL,因为阅读指数首先读取数据,然后放弃不必要的线条,优化的SQL语句(子查询)只读指数(覆盖率)是好的,然后读取所需的柱通过member_id。
摘要:优化的限制是比较有限的,所以实际情况的使用与否都要具体分析。