mysqlmysql分页查询越来越慢一万多条数据 慢 是什么问题

1.对mysql分页查询越来越慢进行优化應尽量避免全表扫描,首先应考虑在 where 及 order by 涉及的列上建立索引

2.应尽量避免在 where 子句中对字段进行 null 值判断,否则将导致引擎放弃使用索引而进荇全表扫描

可以在 num 上设置默认值 0,确保表中 num 列没有 null 值,然后这样mysql分页查询越来越慢:

3.应尽量避免在 where 子句中使用!=或<>操作符否则将引擎放弃使用索引而进行全表扫描。

4.应尽量避免在 where 子句中使用 or 来连接条件否则将导致引擎放弃使用索引而进行全表扫描,

5.in 和 not in 也要慎用否则会导致全表扫描,如:

对于连续的数值能用 between 就不要用 in 了:

6.下面的mysql分页查询越来越慢也将导致全表扫描:

若要提高效率,可以考虑全文检索

7.洳果在 where 子句中使用参数,也会导致全表扫描因为 SQL 只有在运行时才会解析局部变量,但优 化程序不能将访问计划的选择推迟到运行时;它必須在编译时进行选择然 而,如果在编译时建立访问计 划变量的值还是未知的,因而无法作为索引选择的输入项如下面语句将进行全表扫描:

可以改为强制mysql分页查询越来越慢使用索引:

8.应尽量避免在 where 子句中对字段进行表达式操作, 这将导致引擎放弃使用索引而进行全表掃描

9.应尽量避免在 where 子句中对字段进行函数操作,这将导致引擎放弃使用索引而进行全表扫描如:

10.不要在 where 子句中的“=”左边进行函数、算术运算或其他表达式运算,否则系统将可能无法正确使用 索引

11.在使用索引字段作为条件时,如果该索引是复合索引那么必须使用到該索引中的第一个字段作为条件 时才能保证系统使用该索引, 否则该索引将不会 被使用 并且应尽可能的让字段顺序与索引顺序相一致。

12.鈈要写一些没有意义的mysql分页查询越来越慢如需要生成一个空表结构:

这类代码不会返回任何结果集,但是会消耗系统资源的应改成这樣:

14.并不是所有索引对mysql分页查询越来越慢都有效,SQL 是根据表中数据来进行mysql分页查询越来越慢优化的当索引列有大量数据重复时, SQL mysql分页查詢越来越慢可能不会去利用索引如一表中有字段 ***,male、female 几乎各一半,那么即使在 *** 上建 了索引也对mysql分页查询越来越慢效率起不了作用

15.索引并鈈是越多越好,索引固然可以提高相应的 select 的效率但同时也降低了 insert 及 update 的效率,因为 insert 或 update 时有可能会重建索引所以怎样建索引需要慎重考虑,视具体情况而定一个表的索引数最好不要超过 6 个,若太多则应考虑一些不常使用到的列上建的索引是否有必要

16.应尽可能的避免更新 clustered 索引数据列, 因为 clustered 索引数据列的顺序就是表记录的物理存储顺序一旦该列值改变将导致整个表记录的顺序的调整,会耗费相当大的资源若应用系统需要频繁更新 clustered 索引数据列,那么需要考虑是否应将该索引建为 clustered 索引

17.尽量使用数字型字段,若只含数值信息的字段尽量不要設计为字符型这会降低mysql分页查询越来越慢和连接的性能,并 会增加存储开销这是因为引擎在处理mysql分页查询越来越慢和连接时会逐个比較字符串中每一个字符,而对于数字型而言 只需要比较一次就够了

18.尽可能的使用 varchar/nvarchar 代替 char/nchar , 因为首先变长字段存储空间小, 可以节省存储空间 其次对于mysql分页查询越来越慢来说,在一个相对较小的字段内搜索效率显然要高些

19.任何地方都不要使用 select * from t ,用具体的字段列表代替“*”,不要返回用不到的任何字段。

20.尽量使用表变量来代替临时表如果表变量包含大量数据,请注意索引非常有限(只有主键索引)

21.避免频繁创建和刪除临时表,以减少系统表资源的消耗

22.临时表并不是不可使用,适当地使用它们可以使某些例程更有效例如,当需要重复引用大型表戓常用 表中的某个数据集时但是,对于一次性事件 最好使用导出表。

23.在新建临时表时如果一次性插入数据量很大,那么可以使用 select into 代替 create table,避免造成大量 log ,以提高速度;如果数据量不大为了缓和系统表的资源,应先 create table,然后 insert.

24.如果使用到了临时表 在存储过程的最后务必将所有的临時表显式删除, 先 truncate table ,然后 drop table ,这样可以避免系统表的较长时间锁定

25.尽量避免使用游标,因为游标的效率较差如果游标操作的数据超过 1 万行,那么就应该考虑改写

26.使用基于游标的方法或临时表方法之前,应先寻找基于集的解决方案来解决问题基于集的方法通常更 有效。

27.与临時表一样游标并不是不可使用。对小型数据集使用 FAST_FORWARD 游标通常要优于其他逐行处理方法尤其是在必须引用几个表才能获得所需的数据时。在结果集中包括“合计”的例程通常要比使用游标执行的速度快如果开发时 间允许,基于游标的方法和基于集的方法都可以尝试一下看哪一种方法的效果更好。

29.尽量避免大事务操作提高系统并发能力。 sql 优化方法使用索引来更快地遍历表 缺省情况下建立的索引是非群集索引,但有时它并不是最佳的在非群集索引下,数据在物理上随机存放在数据页上合理的索引设计要建立在对各种mysql分页查询越来樾慢的分析和预测上。一般来说:

b.经常同时存取多列且每列都含有重复值可考虑建立组合索引;

c.组合索引要尽量使关键mysql分页查询越来越慢形成索引覆盖,其前导列一定是使用最频繁的列索引虽有助于提高性能但 不是索引越多越好,恰好相反过多的索引会导致系统低效用戶在表中每加进一个索引,维护索引集合就 要做相应的更新工作

30.定期分析表和检查表。

以上语句用于分析和存储表的关键字分布分析嘚结果将可以使得系统得到准确的统计信息,使得SQL能够生成正确的执行计划如果用户感觉实际执行计 划并不是预期的执行计划,执行一佽分析表可能会解决问题在分析期间,使用一个读取锁定对表进行锁定这对于MyISAM,DBD和InnoDB表有作 用

检查表的作用是检查一个或多个表是否囿错误,CHECK TABLE 对MyISAM 和 InnoDB表有作用对于MyISAM表,关键字统计数据被更新

CHECK TABLE 也可以检查视图是否有错误比如在视图定义中被引用的表不存在。

如果删除了表的一大部分或者如果已经对含有可变长度行的表(含有 VARCHAR、BLOB或TEXT列的表)进行更多更改,则应使用OPTIMIZE TABLE命令来进行表优化这个命令可以将表中的涳间碎片进行合并,并且可以消除由于删除或者更新造成的空间浪费但OPTIMIZE TABLE 命令只对MyISAM、 BDB 和InnoDB表起作用。

注意: analyze、check、optimize执行期间将对表进行锁定洇此一定注意要在MySQL数据库不繁忙的时候执行相关的操作。

1、在海量mysql分页查询越来越慢时尽量少用格式转换

3、任何对列的操作都将导致表掃描,它包括数据库教程函数、计算表达式等等mysql分页查询越来越慢时要尽可能将操作移 至等号右边。

4、IN、OR 子句常会使用工作表使索引夨效。如果不产生大量重复值可以考虑把子句拆开。拆开的子 句中应该包含索引

5、只要能满足你的需求,应尽可能使用更小的数据类型:例如使用 MEDIUMINT 代替 INT

6、尽量把所有的列设置为 NOT NULL,如果你要保存 NULL,手动去设置它而不是把它设为默认值。

8、如果你的数据只有你所知的少量的几個最好使用 ENUM 类型

9、正如 graymice 所讲的那样,建立索引

10、合理用运分表与分区表提高数据存放和提取速度。

1.两种mysql分页查询越来越慢引擎mysql分页查询越来越慢速度(myIsam 引擎

MyISAM只要简单的读出保存好的行数即可

注意的是,当count(*)语句包含 where条件时两种表的操作有些不同,InnoDB类型的表用count(*)或者count(主键)加上where col 条件。其中col列是表的主键之外的其他具有唯一约束索引的列这样mysql分页查询越来越慢时速度会很快。就是可以避免全表扫描

mysql 茬300万条数据(myisam引擎)情况下使用 count(*) 进行数据总数mysql分页查询越来越慢包含条件(正确设置索引)运行时间正常。对于经常进行读取的数据我们建议使用myIsam引擎

2.百万数据下mysql分页问题

在开发过程中我们经常会使用分页,核心技术是使用limit进行数据的读取在使用limit进行分页的测试过程中,得到以下数据:

 
我们惊讶的发现mysql在数据量大的情况下分页起点越大mysql分页查询越来越慢速度越慢100万条起的mysql分页查询越来越慢速度已经需偠7秒钟。这是一个我们无法接受的数值!
 
mysql分页查询越来越慢时间 0.365秒提升效率是非常明显的!!原理是什么呢??


适合id连续的系统速喥极快!
 
不适合带有条件的、id不连续的mysql分页查询越来越慢。速度非常快!
3. 百万数据下mysql条件mysql分页查询越来越慢、分页mysql分页查询越来越慢的注意事项
接上一节我们加上mysql分页查询越来越慢条件:
 

好恐怖的速度!!利用第一节知识进行优化:
 

优化效果不明显,条件带来的影响还是佷大!在这样的情况下无论我们怎么去优化sql语句就无法解决运行效率问题那么换个思路:建立一个索引表,只记录文章的id、分类信息峩们将文章内容这个大字段分割出去。




在写入数据时将2张表同步mysql分页查询越来越慢是则可以使用news2 来进行条件mysql分页查询越来越慢:
 

运行时間 1.23秒,我们可以看到运行时间缩减了近20倍!!数据在10万左右是mysql分页查询越来越慢时间可以保持在0.5秒左右是一个逐步接近我们能够容忍的徝!
但是1秒对于服务器来说依然是一个不能接受的值!!还有什么可以优化的办法吗?我们尝试了一个伟大的变化:
将 news2 的存储引擎改变為innodb,执行结果是惊人的!
 
只需要 0.2秒非常棒的速度。

MySQL有多种存储引擎MyISAM和InnoDB是其中常用的两种。这里介绍关于这两种引擎的一些基本概念(非深入介绍)
MyISAM存储引擎,基于传统的ISAM类型支持全文搜索,但不是事务安全的而且不支持外键。每张MyISAM表存放在三个文件中:frm 文件存放表格定义;数据文件是MYD (MYData);索引文件是MYI (MYIndex)
InnoDB是事务型引擎,支持回滚、崩溃恢复能力、多版本并发控制、ACID事务支持行级锁定(InnoDB表的行锁不是絕对的,如果在执行一个SQL语句时MySQL不能确定要扫描的范围InnoDB表同样会锁全表,如like操作时的SQL语句)以及提供与Oracle类型一致的不加锁读取方式。InnoDB存储它的表和索引在一个表空间中表空间可以包含数个文件。

MyISAM是非事务安全型的而InnoDB是事务安全型的。
MyISAM锁的粒度是表级而InnoDB支持行级锁萣。
MyISAM支持全文类型索引而InnoDB不支持全文索引。
MyISAM相对简单所以在效率上要优于InnoDB,小型应用可以考虑使用MyISAM
MyISAM表是保存成文件的形式,在跨平囼的数据转移中使用MyISAM存储会省去不少的麻烦


MyISAM管理非事务表。它提供高速存储和检索以及全文搜索能力。如果应用中需要执行大量的SELECTmysql分頁查询越来越慢那么MyISAM是更好的选择。
InnoDB用于事务处理应用程序具有众多特性,包括ACID事务支持如果应用中需要执行大量的INSERT或UPDATE操作,则应該使用InnoDB这样可以提高多用户并发操作的性能。
Mysql的存储引擎和索引
数据库必须有索引没有索引则检索过程变成了顺序查找,O(n)的时间复杂喥几乎是不能忍受的我们非常容易想象出一个只有单关键字组成的表如何使用B+树进行索引,只要将关键字存储到树的节点即可当数据庫一条记录里包含多个字段时,一棵B+树就只能存储主键如果检索的是非主键字段,则主键索引失去作用又变成顺序查找了。这时应该茬第二个要检索的列上建立第二套索引 这个索引由独立的B+树来组织。有两种常见的方法可以解决多个B+树访问同一套表数据的问题一种叫做聚簇索引(clustered index ),一种叫做非聚簇索引(secondary index)这两个名字虽然都叫做索引,但这并不是一种单独的索引类型而是一种数据存储方式。對于聚簇索引存储来说行数据和主键B+树存储在一起,辅助键B+树只存储辅助键和主键主键和非主键B+树几乎是两种类型的树。对于非聚簇索引存储来说主键B+树在叶子节点存储指向真正数据行的指针,而非主键
InnoDB使用的是聚簇索引,将主键组织到一棵B+树中而行数据就储存茬叶子节点上,若使用"where id = 14"这样的条件查找主键则按照B+树的检索算法即可查找到对应的叶节点,之后获得行数据若对Name列进行条件搜索,则需要两个步骤:第一步在辅助索引B+树中检索Name到达其叶子节点获取对应的主键。第二步使用主键在主索引B+树种再执行一次B+树检索操作最終到达叶子节点即可获取整行数据。
MyISM使用的是非聚簇索引非聚簇索引的两棵B+树看上去没什么不同,节点的结构完全一致只是存储的内容鈈同而已主键索引B+树的节点存储了主键,辅助键索引B+树存储了辅助键表数据存储在独立的地方,这两颗B+树的叶子节点都使用一个地址指向真正的表数据对于表数据来说,这两个键没有任何差别由于索引树是独立的,通过辅助键检索无需访问主键的索引树
为了更形潒说明这两种索引的区别,我们假想一个表如下图存储了4行数据其中Id作为主索引,Name作为辅助索引图示清晰的显示了聚簇索引和非聚簇索引的差异。
我们重点关注聚簇索引看上去聚簇索引的效率明显要低于非聚簇索引,因为每次使用辅助索引检索都要经过两次B+树查找這不是多此一举吗?聚簇索引的优势在哪
1 由于行数据和叶子节点存储在一起,这样主键和行数据是一起被载入内存的找到叶子节点就鈳以立刻将行数据返回了,如果按照主键Id来组织数据获得数据更快。
2 辅助索引使用主键作为"指针" 而不是使用地址值作为指针的好处是減少了当出现行移动或者数据页分裂时辅助索引的维护工作,使用主键值当作指针会让辅助索引占用更多的空间换来的好处是InnoDB在移动行時无须更新辅助索引中的这个"指针"。也就是说行的位置(实现中通过16K的Page来定位后面会涉及)会随着数据库里数据的修改而发生变化(前媔的B+树节点分裂以及Page的分裂),使用聚簇索引就可以保证不管这个主键B+树的节点如何变化辅助索引树都不受影响。
所以在百万级数据及哽大数据情况下mysql innoDB 的索引表现更加优秀!
5、MySQL性能优化的一些经验
a.为mysql分页查询越来越慢优化你的mysql分页查询越来越慢
大多数的MySQL服务器都开启了mysql汾页查询越来越慢缓存。这是提高性能最有效的方法之一而且这是被MySQL的数据库引擎处理的。当有很多相同的mysql分页查询越来越慢被执行了哆次的时候这些mysql分页查询越来越慢结果会被放到一个缓存中,这样后续的相同的mysql分页查询越来越慢就不用操作表而直接访问缓存结果叻。
这里最主要的问题是对于程序员来说,这个事情是很容易被忽略的因为,我们某些mysql分页查询越来越慢语句会让MySQL不使用缓存






上面兩条SQL语句的差别就是 CURDATE() ,MySQL的mysql分页查询越来越慢缓存对这个函数不起作用所以,像 NOW() 和 RAND() 或是其它的诸如此类的SQL函数都不会开启mysql分页查询越来越慢缓存因为这些函数的返回是会不定的易变的。所以你所需要的就是用一个变量来代替MySQL的函数,从而开启缓存

使用EXPLAIN关键字可以让你知道MySQL是如何处理你的SQL语句的。

发现mysql分页查询越来越慢缓慢然后在cate字段上增加索引,则会加快mysql分页查询越来越慢
c.当只要一行数据时使用LIMIT 1
当伱mysql分页查询越来越慢表的有些时候只需要一条数据请使用 limit 1。

索引并不一定就是给主键或是唯一的字段如果在你的表中,有某个字段你總要会经常用来做搜索、拍下、条件那么,请为其建立索引吧

效率很低的一种随机mysql分页查询越来越慢。

从数据库里读出越多的数据那么mysql分页查询越来越慢就会变得越慢。并且如果你的数据库服务器和WEB服务器是两台独立的服务器的话,这还会增加网络传输的负载必須应该养成一个需要什么就取什么的好的习惯。

ENUM 类型是非常快和紧凑的在实际上,其保存的是 TINYINT但其外表上显示为字符串。这样一来鼡这个字段来做一些选项列表变得相当的完美。
如果你有一个字段比如“性别”,“国家”“民族”,“状态”或“部门”你知道這些字段的取值是有限而且固定的,那么你应该使用 ENUM 而不是 VARCHAR。

除非你有一个很特别的原因去使用 NULL 值你应该总是让你的字段保持 NOT NULL。这看起来好像有点争议请往下看。
首先问问你自己“Empty”和“NULL”有多大的区别(如果是INT,那就是0和NULL)如果你觉得它们之间没有什么区别,那么你就不要使用NULL(你知道吗?在 Oracle 里NULL 和 Empty 的字符串是一样的!)
不要以为 NULL 不需要空间,其需要额外的空间并且,在你进行比较的时候伱的程序会更复杂。 当然这里并不是说你就不能使用NULL了,现实情况是很复杂的依然会有些情况下,你需要使用NULL值
下面摘自MySQL自己的文檔


很多程序员都会创建一个 VARCHAR(15) 字段来存放字符串形式的IP而不是整形的IP。如果你用整形来存放只需要4个字节,并且你可以有定长的字段而苴,这会为你带来mysql分页查询越来越慢上的优势尤其是当你需要使用这样的WHERE条件:IP between ip1 and ip2。
我们必需要使用UNSIGNED INT因为 IP地址会使用整个32位的无符号整形
j.固定长度的表会更快
如果表中的所有字段都是“固定长度”的,整个表会被认为是 “static” 或 “fixed-length” 例如,表中没有如下类型的字段: VARCHARTEXT,BLOB只要你包括了其中一个这些字段,那么这个表就不是“固定长度静态表”了这样,MySQL 引擎会用另一种方法来处理
固定长度的表会提高性能,因为MySQL搜寻得会更快一些因为这些固定的长度是很容易计算下一个数据的偏移量的,所以读取的自然也会很快而如果字段不是定長的,那么每一次要找下一条的话,需要程序找到主键
并且,固定长度的表也更容易被缓存和重建不过,唯一的副作用是固定长喥的字段会浪费一些空间,因为定长的字段无论你用不用他都是要分配那么多的空间。

“垂直分割”是一种把数据库中的表按列变成几張表的方法这样可以降低表的复杂度和字段的数目,从而达到优化的目的需要注意的是,这些被分出去的字段所形成的表你不会经瑺性地去Join他们,不然的话这样的性能会比不分割时还要差,而且会是极数级的下降。

如果在一个在线的网站上去执行一个大的 DELETE 或 INSERT mysql分页查询越来越慢你需要非常小心,要避免你的操作让你的整个网站停止相应因为这两个操作是会锁表的,表一锁住了别的操作都进不來了。
Apache 会有很多的子进程或线程所以,其工作起来相当有效率而我们的服务器也不希望有太多的子进程,线程和数据库链接这是极夶的占服务器资源的事情,尤其是内存
如果你把你的表锁上一段时间,比如30秒钟那么对于一个有很高访问量的站点来说,这30秒所积累嘚访问进程/线程数据库链接,打开的文件数可能不仅仅会让你泊WEB服务Crash,还可能会让你的整台服务器马上掛了

对于大多数的数据库引擎来说,硬盘操作可能是最重大的瓶颈所以,把你的数据变得紧凑会对这种情况非常有帮助因为这减少了对硬盘的访问。
n.选择正确的存储引擎

MyISAM 适合于一些需要大量mysql分页查询越来越慢的应用但其对于有大量写操作并不是很好。甚至你只是需要update一个字段整个表都会被锁起来,而别的进程就算是读进程都无法操作直到读操作完成。另外MyISAM 对于 SELECT COUNT(*) 这类的计算是超快无比的。
InnoDB 的趋势会是一个非常复杂的存储引擎对于一些小的应用,它会比 MyISAM 还慢他是它支持“行锁” ,于是在写操作比较多的时候会更优秀。并且他还支持更多的高级应用,仳如:事务

当需要从数据库mysql分页查询越来越慢的表有上万条记录的时候一次性mysql分页查询越来越慢所有结果会变得很慢,特别是随着数据量的增加特别明显这时需要使用分页mysql分页查询越来越慢。对于数据库分页mysql分页查询越来越慢也有很多种方法和优化的点。下面简单说一下我知道的一些方法

为了对下媔列举的一些优化进行测试,下面针对已有的一张表进行说明

  • 描述:某个业务的订单历史表
  • 字段情况:该表一共37个字段,不包含text等大型數据最大为varchar(500),id字段为索引且为递增。
  • 线下找一张百万级的测试表可不容易如果需要自己测试的话,可以写shell脚本什么的插入数据进行測试
    以下的 sql 所有语句执行的环境没有发生改变,下面是基本测试结果:

一般的分页mysql分页查询越来越慢使用简單的 limit 子句就可以实现limit 子句声明如下:

LIMIT 子句可以被用于指定 SELECT 语句返回的记录数。需注意以下几点:

  • 第一个参数指定第一个返回记录行的偏迻量注意从0开始
  • 第二个参数指定返回记录行的最大数目
  • 如果只给定一个参数:它表示返回最大的记录行数目
  • 第二个参数为 -1 表示检索从某┅个偏移量到记录集的结束所有的记录行
  • 初始记录行的偏移量是 0(而不是 1)

数据表中的记录默认使用主键(一般为id)排序,上面的结果相当于:

针对这种mysql分页查询越来越慢方式下面测试mysql分页查询越来越慢记录量对时间的影响:

另外我还做了十来次mysql分页查询越来越慢,从mysql分页查詢越来越慢时间来看基本可以确定,在mysql分页查询越来越慢记录量低于100时mysql分页查询越来越慢时间基本没有差距,随着mysql分页查询越来越慢記录量越来越大所花费的时间也会越来越多。

针对mysql分页查询越来越慢偏移量的测试:

随着mysql分页查询越来越慢偏移的增大尤其mysql分页查询樾来越慢偏移大于10万以后,mysql分页查询越来越慢时间急剧增加

这种分页mysql分页查询越来越慢方式会从数据库第一条记录开始扫描,所以越往後mysql分页查询越来越慢速度越慢,而且mysql分页查询越来越慢的数据越多也会拖慢总mysql分页查询越来越慢速度。

這种方式先定位偏移位置的 id然后往后mysql分页查询越来越慢,这种方式适用于 id 递增的情况

4条语句的mysql分页查询越来越慢时间如下:

针对上面嘚mysql分页查询越来越慢需要注意:

  • 比较第2条语句和第3条语句:速度相差几十毫秒
  • 比较第3条语句和第4条语句:得益于 select id 速度增加,第3条语句mysql分页查询越来越慢速度增加了3倍

这种方式相较于原始一般的mysql分页查询越来越慢方法将会增快数倍。

这种方式假设数据表的id是连續递增的则我们根据mysql分页查询越来越慢的页数和mysql分页查询越来越慢的记录数可以算出mysql分页查询越来越慢的id的范围,可以使用 id between and 来mysql分页查询樾来越慢:

这种mysql分页查询越来越慢方式能够极大地优化mysql分页查询越来越慢速度基本能够在几十毫秒之内完成。限制是只能使用于明确知噵id的情况不过一般建立表的时候,都会添加基本的id字段这为分页mysql分页查询越来越慢带来很多便利。

还可以有另外一种写法:

当然还可鉯使用 in 的方式来进行mysql分页查询越来越慢这种方式经常用在多表关联的时候进行mysql分页查询越来越慢,使用其他表mysql分页查询越来越慢的id集合来进行mysql分页查询越来越慢:

这种 in mysql分页查询越来越慢的方式要注意:某些 mysql 版本不支持在 in 子句中使用 limit。

这种方式已经不属于mysql汾页查询越来越慢优化这儿附带提一下。

对于使用 id 限定优化中的问题需要 id 是连续递增的,但是在一些场景下比如使用历史表的时候,或者出现过数据缺失问题时可以考虑使用临时存储的表来记录分页的id,使用分页的id来进行 in mysql分页查询越来越慢这样能够极大的提高传統的分页mysql分页查询越来越慢速度,尤其是数据量上千万的时候

一般情况下,在数据库中建立表的时候强制为每一张表添加 id 递增字段,这样方便mysql分页查询越来越慢

如果像是订单库等数据量非常庞大,一般会进行分库分表这个时候不建议使用数据库的 id 莋为唯一标识,而应该使用分布式的高并发唯一 id 生成器来生成并在数据表中使用另外的字段来存储这个唯一标识。

使用先使用范围mysql分页查询越来越慢定位 id (或者索引)然后再使用索引进行定位数据,能够提高好几倍mysql分页查询越来越慢速度即先 select id,然后再 select *;

本人才疏学浅难免犯错,若发现文中有错误遗漏望不吝赐教。

我要回帖

更多关于 mysql分页查询越来越慢 的文章

 

随机推荐