分表实战一

2024-09-02 05:32
文章标签 实战 分表

本文主要是介绍分表实战一,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

现在单表超过一千万记录,虽然索引完全使用,依旧会出现慢查询。日增平均40万。
数据库要重新设计,目的提高查询速度,只查询热数据。

设计思路
  • 根据热数据时效性,保持在近三个月内,计划一年生成6张表。
  • 利用union来查询,当前月在内的近三个月或四个月的数据。
  • 牵扯查询尽量使用索引。
如何生成表?

比如2020年,生成20200102,20200304,20200506,20200708,20200910,20201112六张表
从一月到十二月,连续每两个月生成一张表
可提前把一年要用的数据表用mysql直接创建。

查询如何确定表?

依托当前月份可以直接取到表,设置一个数组来保存对应关系,这样感觉挺方便的
入库的时候直接用self:: i n t a l b e − − − − − − − 查 询 的 时 候 直 接 用 s e l f : : intalbe -------查询的时候直接用self:: intalbeself::seltalbe

		$rent_arrs = ['2020'=>['1'=>['name'=>'20200102','table'=>['20200102']],'2'=>['name'=>'20200102','table'=>['20200102']],'3'=>['name'=>'20200304','table'=>['20200102','20200304']],'4'=>['name'=>'20200304','table'=>['20200102','20200304']],'5'=>['name'=>'20200506','table'=>['20200304','20200506']],'6'=>['name'=>'20200506','table'=>['20200304','20200506']],'7'=>['name'=>'20200708','table'=>['20200506','20200708']],'8'=>['name'=>'20200708','table'=>['20200506','20200708']],'9'=>['name'=>'20200910','table'=>['20200708','20200910']],'10'=>['name'=>'20200910','table'=>['20200708','20200910']],'11'=>['name'=>'20201112','table'=>['20200910','20201112']],'12'=>['name'=>'20201112','table'=>['20200910','20201112']]],'2021'=>['1'=>['name'=>'20210102','table'=>['20210102','20201112']],'2'=>['name'=>'20210102','table'=>['20210102','20201112']],]];$y=date("Y");$m=date("n");self::$intalbe  = $rent_arrs[$y][$m]['name'];self::$seltalbe = $rent_arrs[$y][$m]['table'];
查询的时候用哪种方式比较高效呢?目前经过本地多次测试,explain查看,查询消耗时间对比,第二种速度较快,后期数据积累到一定程度,还不能确定

thinkphp5框架

第一种,利用union连接sql生成临时表查询(需要传查询条件,分页,索引)
		$w['city_id'] = 220;$page=1;$a = Db::name(self::$seltalbe[0])->field('title,date')->where($w)->buildSql();$c = Db::name(self::$seltalbe[1])->field('title,date')->where($w)->union([$a])->buildSql();$list = Db::table($c . ' temp')->order('date desc')->limit($page-1,3)->select();var_dump($list);

原生SQL

SELECT * FROM ( SELECT `title`,`date` FROM `fcxlt_rent_20200304` WHERE  `city_id` = 220 UNION ( SELECT `title`,`date` FROM `fcxlt_rent_20200102` WHERE  `city_id` = 220 ) ) temp ORDER BY date desc LIMIT 0,3
第二种,直接union查询(需要传查询条件,分页,索引)
		$s = Db::field('title,date')->name(self::$seltalbe[0])->union(function($query) use ($page,$w){$query->field('title,date')->name(self::$seltalbe[1])->where($w)->order('date desc')->page($page,3);})->where($w)->select();var_dump($s);

原生SQL

SELECT `title`,`date` FROM `fcxlt_rent_20200102` WHERE  `city_id` = 220 UNION SELECT `title`,`date` FROM `fcxlt_rent_20200304` WHERE  `city_id` = 220 ORDER BY date desc LIMIT 0,3

这篇关于分表实战一的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1129122

相关文章

使用 sql-research-assistant进行 SQL 数据库研究的实战指南(代码实现演示)

《使用sql-research-assistant进行SQL数据库研究的实战指南(代码实现演示)》本文介绍了sql-research-assistant工具,该工具基于LangChain框架,集... 目录技术背景介绍核心原理解析代码实现演示安装和配置项目集成LangSmith 配置(可选)启动服务应用场景

在Java中使用ModelMapper简化Shapefile属性转JavaBean实战过程

《在Java中使用ModelMapper简化Shapefile属性转JavaBean实战过程》本文介绍了在Java中使用ModelMapper库简化Shapefile属性转JavaBean的过程,对比... 目录前言一、原始的处理办法1、使用Set方法来转换2、使用构造方法转换二、基于ModelMapper

Java实战之自助进行多张图片合成拼接

《Java实战之自助进行多张图片合成拼接》在当今数字化时代,图像处理技术在各个领域都发挥着至关重要的作用,本文为大家详细介绍了如何使用Java实现多张图片合成拼接,需要的可以了解下... 目录前言一、图片合成需求描述二、图片合成设计与实现1、编程语言2、基础数据准备3、图片合成流程4、图片合成实现三、总结前

nginx-rtmp-module构建流媒体直播服务器实战指南

《nginx-rtmp-module构建流媒体直播服务器实战指南》本文主要介绍了nginx-rtmp-module构建流媒体直播服务器实战指南,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有... 目录1. RTMP协议介绍与应用RTMP协议的原理RTMP协议的应用RTMP与现代流媒体技术的关系2

C语言小项目实战之通讯录功能

《C语言小项目实战之通讯录功能》:本文主要介绍如何设计和实现一个简单的通讯录管理系统,包括联系人信息的存储、增加、删除、查找、修改和排序等功能,文中通过代码介绍的非常详细,需要的朋友可以参考下... 目录功能介绍:添加联系人模块显示联系人模块删除联系人模块查找联系人模块修改联系人模块排序联系人模块源代码如下

MySQL分表自动化创建的实现方案

《MySQL分表自动化创建的实现方案》在数据库应用场景中,随着数据量的不断增长,单表存储数据可能会面临性能瓶颈,例如查询、插入、更新等操作的效率会逐渐降低,分表是一种有效的优化策略,它将数据分散存储在... 目录一、项目目的二、实现过程(一)mysql 事件调度器结合存储过程方式1. 开启事件调度器2. 创

Golang操作DuckDB实战案例分享

《Golang操作DuckDB实战案例分享》DuckDB是一个嵌入式SQL数据库引擎,它与众所周知的SQLite非常相似,但它是为olap风格的工作负载设计的,DuckDB支持各种数据类型和SQL特性... 目录DuckDB的主要优点环境准备初始化表和数据查询单行或多行错误处理和事务完整代码最后总结Duck

Python中的随机森林算法与实战

《Python中的随机森林算法与实战》本文详细介绍了随机森林算法,包括其原理、实现步骤、分类和回归案例,并讨论了其优点和缺点,通过面向对象编程实现了一个简单的随机森林模型,并应用于鸢尾花分类和波士顿房... 目录1、随机森林算法概述2、随机森林的原理3、实现步骤4、分类案例:使用随机森林预测鸢尾花品种4.1

Golang使用minio替代文件系统的实战教程

《Golang使用minio替代文件系统的实战教程》本文讨论项目开发中直接文件系统的限制或不足,接着介绍Minio对象存储的优势,同时给出Golang的实际示例代码,包括初始化客户端、读取minio对... 目录文件系统 vs Minio文件系统不足:对象存储:miniogolang连接Minio配置Min

Mycat搭建分库分表方式

《Mycat搭建分库分表方式》文章介绍了如何使用分库分表架构来解决单表数据量过大带来的性能和存储容量限制的问题,通过在一对主从复制节点上配置数据源,并使用分片算法将数据分配到不同的数据库表中,可以有效... 目录分库分表解决的问题分库分表架构添加数据验证结果 总结分库分表解决的问题单表数据量过大带来的性能