对数据库的优化一直是很多大型网站运营过程中必须应对的重要问题。比如,在2012 年3 月底本人有参与开发了一个A省的省级的政务信息公开发布系统,经过了4个月的功能开发和测试之后,该系统正式上线了,由于该系统采用的是地区分站模式,按照“省-市-县-镇-村”的站点模式,由GVM主导,该系统在A省的所 有地区很快就开始推广使用,随着每日发布的政务公开信息逐步增加,结果2个月之后,发现系统曾出现过慢查询的问题。按照初步计算,A省共有15000多个 行政村,1200个镇,100个县与9个市,假设每个村、镇、县、市、省每日发布信息各10条,那么每日的信息发布数量将达到 (15000+1200+100+9+1)*10=163100条数据,那么1个月的数据量将达到163100*30=4893000︾5000000, 那么两个月将达到10000000条,一年将达到上亿条的数据量。面对着这么大的数据量,查询效率也会成为系统的一个性能的瓶颈。
在两个月的时间内,数据库达到千万级的信息条数是一个较大的数据量。特别是在刚开始的1-2个月的过程中,我们还能够在5秒左右的时间范围内对信息进行查询,可是随着信息 量的逐步增加,现在每次的信息汇总和报表都要进行较长的时间等待,最多的达到20多秒。核对了下当初选择的服务器性能配置是没有问题的,那么这个时候我们只有通过优化数据库的结构来提升数据的查询效率了。
数据库结构的优化有多种方法,主要的有两种,一是利用存储过程来代替常用的SQL查询语句;另一种是使用数据库管理系统中的分区表方法进。使用存储过程的优化方法有执行速度快的优点,但是其本身不利于调试、没有办法使用数据库缓存机制等缺点,所以在系统安全性和性能要求更高的情况下,建议使用分区表的方法。但要注意:并不是只要数据量就够多就需要通过数据库分区表来提高查询效率,而是要在数据是分段的前提下,我们才需要考虑到是否需要使用分区表。很显然,结合上述的例子,政务信息公开发布系统,发布的信息是按时间段进行查询的,所以我们可以进行数据库表分区。
数据库的表分区有两种方式,水平表分区和垂直表分区。
水平分区的目的是将一个表分为多个表。每个表包含的列数(表字段)都是相同的,但是记录数(数据行)会减少。比如,我们可以将一个包含1亿行记录的数据库表,按照水平分区的方式,分成12个小表,每个小表分别表示这一年份内从1月到12月的数据。这样,任何需要查询特定月份数据的查询只需查询相应月份的表,而避免从存储在1个大表中的所有月份的数据进行查询。根据SQL语句的执行效率,毫无疑问,从小表中的查询效率会远远高于从大表中查询的效率。垂直分区方式则与水平分区方式相反,从纵向进行分区,是将一个原始表分成多个只包含较少列的表。在日常的应用中,水平分区可以说是最常用的分区方式,所有下面我们以水平分区方式来介绍。
用最简单话说,数据库分区表就是将一个大表分成许多个小表。这里,我们以政务信息公开表为例,该表记录着所有时间段内发布的政务信息,那么我们就可以进行水平分区,把这个大的信息表按时间分成几个小表,假设这里分成10个小表。2012年、2013年、2014年…2021年。那么,如果你想查询哪个年份的记录,就可以去相对应的表里进行检索,由于每个表中的记录数,会比一个大表记录数少了很多,其查询效率也会得到明显的提高。
但我们还应该注意到,如果按照一个大表分成几个小表的处理方式,会给软件开发人员增加代码编程上的负担和难道。以记录增加或修改为例,以上10个表是独立的10个表,在不同时间进行记录增加或修改操作的时候,编程人员需要使用不同的SQL语句。例如在2012年添加记录时,程序员要将记录添加到2012年那个表里; 在2013年添加记录时,程序员要将记录添加到2013年的那个表里。这样,编程人员的工作量会增加,出现程序错误的可能性也会增加。那么这种情况下我们该如何进行水平分区呢?
使用分区表就可以很好的解决上面问题。分区表可以从物理上将一个大表分成 几个小表,但是从逻辑上来看,还是一个大表。分区表可以将一个信息记录表分成若干个物理上的小表,但是对于编程人员而言,他们所面对的依然是一个大表,无论是2012年记录添加还是2013年记录添加,对于编程人员而言是不需要考虑的,他只要将记录插入到信息记录表(逻辑意义上的大表)里就行了。
对应数据库分区表的操作,不同的数据库都有各自创建数据库分区的方法,比如微软的数据库SQL Server就可以实现数据库分区表的操作,通过相关的设置后就可以实现数据库的分区操作。使用SQL Server创建分区表的具体操作步骤可以使用SQL命令,也可以使用数据库本身自带的向导来完整数据库分区操作。
分享到:
相关推荐
KWDB 是一款面向 AIoT 场景的分布式多模数据库产品,支持在同一实例同时建立时序库和关系库并融合处理多模数据,具备千万级设备接入、百万级数据秒级写入、亿级数据秒级读取等时序数据高效处理能力,具有稳定安全、高可用、易运维等特点。
yolo系列算法目标检测数据集,包含标签,可以直接训练模型和验证测试,数据集已经划分好,适用yolov5,yolov8,yolov9,yolov7,yolov10,yolo11算法; 包含两种标签格:yolo格式(txt文件)和voc格式(xml文件),分别保存在两个文件夹中; yolo格式:<class> <x_center> <y_center> <width> <height>, 其中: <class> 是目标的类别索引(从0开始)。 <x_center> 和 <y_center> 是目标框中心点的x和y坐标,这些坐标是相对于图像宽度和高度的比例值,范围在0到1之间。 <width> 和 <height> 是目标框的宽度和高度,也是相对于图像宽度和高度的比例值
那些年,与你同分同位次的同学都去了哪里?全国各大学在四川2020-2024年各专业最低录取分数及录取位次数据,高考志愿必备参考数据
做4.3这一节的时候的maple文件,仅供参考
stm32的实时时钟使用代码
基于go语言,使用gocv和socket实现摄像头视频传输项
jsoncpp不能正常解析,以及全角字符的问题,可以直接编辑使用.zip
在我们日常使用电脑的过程中,经常会遇到需要在不同网络环境下切换 IP 地址的情况。手动设置 IP 地址不仅繁琐,还容易出错。今天,我要向大家推荐一款超实用的网络管理工具 ——IP Switcher。 一、软件简介: IP Switcher 是一款功能强大的网络配置切换软件,它可以帮助用户在不同的网络环境下快速切换 IP 地址、子网掩码、网关、DNS 等网络设置,提高工作效率。 二、软件特点: 快速切换 IP Switcher 可以在几秒钟内完成网络配置的切换,无需手动设置 IP 地址、子网掩码、网关、DNS 等参数,大大节省了时间。 多种配置方案 用户可以根据不同的网络环境创建多个网络配置方案,每个方案可以设置不同的 IP 地址、子网掩码、网关、DNS 等参数。在需要切换网络环境时,只需选择相应的配置方案即可。 自动切换 IP Switcher 支持自动切换网络配置方案,可以根据用户设置的条件自动切换到相应的网络配置方案。例如,用户可以设置在连接到特定的无线网络时自动切换到相应的网络配置方案。 简单易用 IP Switcher 的界面简洁直观,操作非常方便。用户只需几个简单的步骤
tornado创建的一个web项目,实现了cookie,session,连接mysql和redis数据库,对主handler进行抽取,模拟登陆,图形化验证等一些功能业务_tornado_project.zip
mtk计算屏帧数的表格
fenlei20241031
那些年,与你同分同位次的同学都去了哪里?全国各大学在四川2020-2024年各专业最低录取分数及录取位次数据,高考志愿必备参考数据
爱心代码
那些年,与你同分同位次的同学都去了哪里?全国各大学在四川2020-2024年各专业最低录取分数及录取位次数据,高考志愿必备参考数据
CSDN海神之光上传的全部代码均可运行,亲测可用,尽我所能,为你服务; 1、代码压缩包内容 主函数:main.m; 调用函数:其他m文件;无需运行 运行结果效果图; 2、代码运行版本 Matlab 2019b;若运行有误,根据提示修改;若不会,可私信博主; 3、运行操作步骤 步骤一:将所有文件放到Matlab的当前文件夹中; 步骤二:双击打开main.m文件; 步骤三:点击运行,等程序运行完得到结果; 4、物理应用 仿真:导航、地震、电磁、电路、电能、机械、工业控制、水位控制、直流电机、平面电磁波、管道瞬变流、刚度计算 光学:光栅、杨氏双缝、单缝、多缝、圆孔、矩孔衍射、夫琅禾费、干涉、拉盖尔高斯、光束、光波、涡旋 定位问题:chan、taylor、RSSI、music、卡尔曼滤波UWB 气动学:弹道、气体扩散、龙格库弹道 运动学:倒立摆、泊车 天体学:卫星轨道、姿态 船舶:控制、运动 电磁学:电场分布、电偶极子、永磁同步、变压器
摄像基本操作.ppt
那些年,与你同分同位次的同学都去了哪里?全国各大学在四川2020-2024年各专业最低录取分数及录取位次数据,高考志愿必备参考数据
那些年,与你同分同位次的同学都去了哪里?全国各大学在四川2020-2024年各专业最低录取分数及录取位次数据,高考志愿必备参考数据