ICode9

精准搜索请尝试: 精确搜索
首页 > 数据库> 文章详细

mysql count(*)、limit分页慢的终极解决方案新鲜出炉

2020-11-28 19:32:17  阅读:515  来源: 互联网

标签:count 10 删除 limit mysql aggregate table id delete


省略一切闲言碎语直接上方案。

 

第一步:建一个表,命名为 test,一个id字段,再加一个content内容字段吧;

第二步:往test里塞1000万条数据,当然你也可以塞10亿条,哈哈哈哈哈;

第三步:建一个表:命名为 table_delete_id_aggregate,两个字段,三个字段,id、did(删除的id),tableName(删除数据的表名称);

第四步:某个表(假设A表)删除数据时需要往table_delete_id_aggregate表中记录被删除id和数据表名;

第五步:某个表(假设A表)添加数据时,需要从table_delete_id_aggregate中随意获得一个已删除的id,用来填补已经缺失的id,添加成功后从table_delete_id_aggregate中删除这个id,目的是为了减少table_delete_id_aggregate的数据量以及让A表的id变得更连续;

第六步:某个表(假设A表)查询时,需要先查出这个查询条件的最小id,得到这个id后,需要用到一个方法,用来向找到数据之间存在多少断点,譬如已经删除的id值为1、2、3、4、5、6、7、8、9、10、30、300、1000,最小id是1,分页需要往后取10条数据,需要遍历一下这个已删除的数组,找到满足取10条的最大id值,然后交给查询语句between minid and maxid查出所需的10条数据。然后limit就不需要了。

 

至此,10亿+的mysql表,就再也没有count(*)、limit查询语句性能差效率低问题了。当然,这种方法只适合在分页时使用,不过别的场景应该也没有多大问题哈。

唉!又免费为社会广大人民做贡献了,希望数据库公司不会因此而倒闭。

标签:count,10,删除,limit,mysql,aggregate,table,id,delete
来源: https://www.cnblogs.com/tie123abc/p/14053676.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有