mysql优化测试
1、清阐述索引的原理;
索引的本质是帮助mysql高效获取数据的数据结构,提取句子主干,索引是一种
数据结构,为了使查询的性能更好,我们会使用多种算法进行优化,索引主要是基于二叉树结构,而这种数据二叉树结构也正是索引
2、请阐述索引的分类和各种索引的使用方式;
索引类型有:1)唯一索引;2)主键索引;3)聚集索引
唯一索引是不允许其中任何两行具有相同的索引值的索引
主键索引是数据库经常有一列或列组合,其唯一标识表的每一行,该列称为表的主键,在数据库关系图中,为表定义主键将自动创建主键索引聚集索引:在聚集索引中,其中行的屋里顺序于键值的逻辑顺序相同,一个表只能包含一个聚集索引
3、请聊聊复合索引
两个或多个列上的索引被称作为复合索引,利用索引中的附加列可以缩小搜索范围,范时勇一个具有两列的索引,复合索引的结构也于电话本类似,任命由姓和名组成,电话簿首先根据姓氏进行排序,然后根据名字对相同姓氏的人进行排序,所以复合索引的创建,应该考虑列的顺序,对索引中的所有列执行所有或进队前几列做艘多复合索引很有效,而对于后面的任意搜索执行无效
4、聊聊MYSQL主从的原理?
Mysql支持单向异步的赋值,而在赋值过程中一个主服务器,而一个或多个其它服务器充当从服务器,mysql赋值基于主服务器在二进制日志中跟踪所有对数据库的更改,因此要进行主从同步,必须先在祝福器上启用二进制日志,每个从服务器接收主服务器已经记录到二进制日志的保存的更新,当一个从服务器连接主服务器的时候,它通知主服务器从服务器在日志中读取的最后一次成功更新的位置5、MYSQL主从同步会不会有同步引起的延迟?怎么处理的?
Mysql主从同步会出现同步引起的延迟,,而针对于不同的情况处理的方法也是不同的例如:实例滚个配置过小而导致的延迟,这种延迟是由于io线程和sql 线程消耗掉了所有的io资源,所以当制度节点配置不够时,则出现延迟,解决方案是,升级制度实例规格,防止由于只读实例的规格较小导致的数据延迟,还有一个就是主库执行大事务时导致的延迟,主库执行了一条insert *** select** 非常大的插入操作,该操作产生了近几百亿的binlog日志文件传输到只读节点,进而导致只读节点出现应用binlog延迟
6、读写分离怎么实现的?
首先生产环境中药实现读写分离,就需要mysql主和mysql从服务器.
在mysql主服务器上,建立写的账号并给予相关权限, 例如一些基本的CRUD等操作,然后再程序上写个相关的方法或函数在写的时候,调用这个方法或函数,在从服务器上,建立读的账号,并给予相关权限,然后再程序上写个方法或函数,在读的时候,调用这个方法或函数
7、你们系统中数据增长最快的表是哪张?怎么优化的?
资金流水表的数据增长快
我们采用分表,不要按照时间分,按找内容的种类分。
这样程序改动就很小,只是改连接不同的表。
8、聊聊你们怎么做系统优化的?
我们的系统一般如果做优化的话,会先从索引/sql/服务器内存分配/资源竞争调整表空间/数据库集群等方面来进行优化
首先从索引方面提升性能在真对字段创建索引的人是时候,为了可以很快查询到所需要的数据,一般来说会遵循以下基本原则1)该字段是否为关键字,逐渐和外键必须添加索引,2)为经常与表进行连接的表的连接字段建立索引3)对经常与表进行连接的连接字段建立索引
第二sql语句的优化,sql语句优化的实质就是在结果正确的前提下,使用优化器可以识别的语句,充分的利用索引来减少扫描的i/o次数,尽量避免表搜索的发生,通常的步骤是:1)先查找到有问题的sql语句,优化有问题的sql语句能显著的提高数据库性能,
第三调整服务器的内存分配,DBA根据数据库的运行状况会对一些全局区的数据缓冲区和日志缓冲区以及共享池的大小进行调整
第四调整资源竞争,当多个进程对相同的资源进行申请时,就产生了竞争,调整策略是1)修改process参数,2_减少调度进行的竞争,3减少多线程服务线程竞争4:减少重做日志缓冲区的竞争,。
mysql性能测试报告
MySQL性能测试报告1. 引言MySQL是一种开源的关系型数据库管理系统,被广泛应用于Web应用程序的开发中。
在开发过程中,了解MySQL的性能是非常重要的,可以帮助我们优化和调整数据库的配置,以提高系统的响应速度和稳定性。
在本文档中,我们将介绍如何进行MySQL性能测试,并分析测试结果。
2. 测试环境准备在进行性能测试之前,我们需要准备一个合适的测试环境。
以下是一些测试环境准备的步骤:2.1 安装MySQL首先,我们需要安装MySQL数据库。
可以从MySQL官方网站下载安装程序,并按照提示进行安装。
2.2 创建测试数据库在MySQL中,我们可以使用CREATE DATABASE语句创建一个新的数据库,用于存储测试数据。
例如,我们可以使用以下命令创建一个名为testDB的数据库:CREATE DATABASE testDB;2.3 创建测试表在测试数据库中,我们需要创建一个测试表,用于存储测试数据。
可以使用CREATE TABLE语句创建一个新的表。
例如,我们可以使用以下命令创建一个名为testTable的表:CREATE TABLE testTable (id INT PRIMARY KEY,name VARCHAR(100),age INT);2.4 插入测试数据在测试表中,我们需要插入一些测试数据,以模拟真实的数据库负载。
可以使用INSERT INTO语句插入数据。
例如,我们可以使用以下命令插入一条测试数据:INSERT INTO testTable (id, name, age) VALUES (1, 'Alice', 25);3. 性能测试步骤一旦我们准备好了测试环境,就可以开始进行MySQL性能测试了。
以下是一些性能测试的步骤:3.1 选择性能测试工具在进行性能测试之前,我们需要选择一个合适的性能测试工具。
常用的MySQL 性能测试工具有sysbench、mysqlslap等。
如何对MySQL数据库进行性能测试和压力测试
如何对MySQL数据库进行性能测试和压力测试引言:MySQL是一种非常流行的关系型数据库管理系统,用于存储和管理大量的数据。
对于开发人员和数据库管理员来说,了解MySQL数据库的性能和可靠性非常重要。
性能测试和压力测试是评估数据库性能的有效方法。
本文将介绍如何对MySQL数据库进行性能测试和压力测试,以帮助开发人员和数据库管理员优化数据库性能。
一、性能测试的目的和意义性能测试是通过模拟实际使用情况,评估系统和数据库的性能指标。
MySQL 数据库的性能测试可以帮助开发人员和数据库管理员了解数据库在不同负载情况下的性能表现,并发现可能的性能瓶颈和优化方向。
通过性能测试,可以提前发现数据库的性能问题,并采取相应的措施解决问题,确保系统具有良好的稳定性和可靠性。
二、性能测试的方法和步骤1. 确定测试需求:在进行性能测试之前,需要明确测试的目标和需求。
比如测试的负载量、测试的时间范围、测试的场景等。
2. 创建测试数据:为了模拟真实的使用情况,需要创建测试数据。
可以使用工具如DataGenerator或自己编写脚本生成测试数据。
3. 设置测试环境:为了保证测试的准确性和可重复性,需要创建独立的测试环境。
该环境包括独立的服务器和数据库实例。
缓冲区大小、连接数、线程数、日志等参数。
5. 执行测试脚本:编写测试脚本,模拟实际的使用场景,并执行测试脚本。
可以使用工具如Sysbench、Percona Toolkit等进行测试。
6. 监控和分析性能指标:在测试过程中,需要及时监控数据库的性能指标,如响应时间、并发数、吞吐量等。
可以使用工具如MySQL Enterprise Monitor、Prometheus等进行监控和分析。
7. 性能优化和问题解决:根据性能测试的结果,发现性能瓶颈和问题,并采取相应的措施进行优化和解决。
如调整索引、优化查询、增加服务器资源等。
8. 重新测试和验证:在优化和解决问题后,需要重新进行性能测试,验证优化效果是否达到预期。
MySQL数据库的压力测试与性能评估
MySQL数据库的压力测试与性能评估一、引言MySQL作为一种开源的关系型数据库管理系统,被广泛应用于互联网和企业级系统中。
随着数据量和访问量的增加,数据库的性能和稳定性变得尤为重要。
为了确保数据库系统能够承受持续的高负载压力,进行压力测试和性能评估就显得尤为重要。
本文将介绍MySQL数据库的压力测试方法和性能评估指标,以及如何优化数据库性能。
二、压力测试方法1. 构建测试环境在进行压力测试之前,需要构建一个与实际生产环境相似的测试环境。
首先,搭建一台或多台具备一定性能的物理服务器或虚拟机。
然后,安装并配置MySQL 数据库,创建相应的表结构和索引。
2. 生成测试数据为了测试数据库的性能,需要生成一定量的测试数据。
可以使用工具或编写脚本生成各种类型的数据,以模拟真实的数据操作场景。
3. 设计测试用例根据实际需求,设计一系列的测试用例。
测试用例应该包括常见的增删改查操作,以及复杂的联表查询、事务处理等操作。
测试用例应该涵盖各种不同的数据量和并发访问量。
4. 执行压力测试使用性能测试工具,如Apache JMeter或OpenSTA,执行事先设计好的测试用例。
通过模拟多个并发用户对数据库进行操作,统计数据库的响应时间、吞吐量、并发连接数等性能指标。
三、性能评估指标1. 响应时间响应时间是用户提交请求后,服务器响应所需的时间。
通常以平均响应时间或百分位响应时间表示。
低延迟的响应对于用户体验至关重要。
2. 吞吐量吞吐量指单位时间内能够处理的请求数量。
可以通过每秒钟处理请求数(TPS)或每秒钟传输的数据量(QPS)来衡量数据库的性能。
高吞吐量表示数据库具备较高的处理能力。
3. 并发连接数并发连接数指同时连接到数据库的客户端数量。
测试过程中对并发连接数的控制可以反映数据库在高并发情况下的性能表现。
较高的并发连接数可能导致数据库响应变慢或崩溃。
4. CPU和内存利用率通过监控数据库服务器的CPU和内存使用情况,可以评估数据库在高负载情况下的资源利用情况。
MySQL性能优化Workshop -性能测试工具
Benchmarks
实用于
> > > > > > > >
验证应用的性能 度量调优后性能的改变 验证扩展性 容量规划 尽可能模拟关键特性 注入典型数据 真实数据库大小,连接数,输入值 类似的系统,网络,硬件
计划:
8
Sun 开源技术高级研讨班
测试工具
9
Sun 开源技术高级研讨班
记录执行时间过长 SQL 语句
> 确定 gcc 正确安装 > /configure –with-mysql-includes=
/usr/local/mysql/include –with-mysql-libs= /usr/local/mysql/lib && make && make install
测试 CPU
> sysbench --test=cpu --cpu-max-prime=20000 run
MySQL 性能优化 Workshop - 性能测试工具
樊荣
Sun 大中华区开源推广中心 2009 年 1 月 3 日
Sun 开源技术高级研讨班
内容
Perfoห้องสมุดไป่ตู้ance 与 Benchmark 概念 测试工具
> > > > >
showslowquerylog MySQL Benchmark() 函数 MySQLslap Super smack Sysbench
24
Sun 开源技术高级研讨班
MyBench
模拟客户端执行操作,并且可以搜集数 据,并做统计计算 基于 perl 的系统
> DBI > DBI:mysql > Time:HiRes
mysql 调优 面试题
mysql 调优面试题MySQL调优面试题MySQL是一种常用的数据库管理系统,它的性能优化对于提升数据库的效率和响应速度非常重要。
在MySQL的面试中,调优问题经常被提及。
本文将介绍一些常见的MySQL调优面试题,并给出相应的解答。
1. 什么是MySQL的优化?MySQL的优化是指通过改进配置、索引和查询语句等手段,提高MySQL数据库系统的性能、稳定性和可用性的过程。
优化的目标是减少资源占用,提高查询速度,提高并发性能,以及降低数据库的负载。
2. 怎样查看MySQL的性能瓶颈?常见的方法有:- 运行SHOW PROCESSLIST命令,查看当前的查询和连接情况,找出正在执行的耗时查询。
- 使用MySQL自带的性能监控工具,如MySQL Workbench、MySQL Enterprise Monitor等,收集和分析数据库性能指标。
- 使用第三方性能监控工具,如pt-query-digest、Percona Toolkit等,对慢查询日志进行分析,找出影响性能的SQL语句。
- 监控服务器的系统资源使用情况,如CPU、内存、磁盘IO等,找出瓶颈所在。
- 使用性能测试工具,如sysbench、TPC-H等,对数据库进行压力测试,发现性能瓶颈。
3. 如何优化MySQL的查询性能?以下是一些常用的查询性能优化方法:- 使用合适的索引,以加快查询的速度。
可以通过使用EXPLAIN命令来分析查询语句的执行计划,判断是否使用了正确的索引。
- 避免使用SELECT *,只查询需要的字段,减少数据的传输量。
- 优化复杂查询语句,尽量减少子查询的使用,使用JOIN语句等代替。
- 避免在WHERE子句中使用函数或计算,以免引起全表扫描。
- 对于频繁执行的查询,考虑使用缓存技术,如Memcached或Redis,将查询结果缓存起来。
- 分析和优化查询语句的执行计划。
4. 如何优化MySQL的表结构?以下是一些常用的表结构优化方法:- 根据业务需求设计合理的表结构,避免冗余字段和重复数据。
MySQL数据库管理系统功能测试报告
MySQL数据库管理系统功能测试报告一、测试背景本次测试主要针对MySQL数据库管理系统的功能进行全面测试,旨在评估系统在各项功能方面的稳定性和性能表现。
测试过程中,我们将根据系统的设计要求和用户需求,对系统的各项功能进行详细测试和验证,以确定系统是否满足预期效果并提供改进建议。
二、测试目标1. 验证系统的数据库创建功能是否可靠,是否能够成功创建并管理数据库。
2. 测试系统的数据导入导出功能,确保数据的可靠导入和导出,以及相关设置是否正常工作。
3. 评估系统的数据备份与恢复功能,确保数据能够可靠备份并能够顺利恢复。
4. 测试系统的查询功能,验证查询结果是否准确,并评估查询性能。
5. 验证系统的数据权限管理功能,确保只有授权用户能够访问和操作数据库。
6. 评估系统的性能和稳定性,包括对大数据量和高并发情况下的测试。
三、测试方法1. 执行功能测试用例,对系统的各项功能进行详细测试。
2. 利用随机数据和真实数据进行测试,以模拟实际使用情况。
3. 进行性能测试,模拟多用户同时访问和操作数据库,观察系统的响应时间和资源占用情况。
4. 通过对比结果和预期输出进行验证,并记录测试过程中发现的问题和异常情况。
四、测试结果1. 数据库创建功能测试:- 系统成功创建了测试所需的数据库,并提供了相关的管理功能。
- 数据库创建过程中,系统没有出现错误或异常。
2. 数据导入导出功能测试:- 系统提供了数据导入和导出的功能,并支持多种文件格式。
- 在导入和导出数据时,系统能够正确处理各种数据类型和特殊字符。
- 导入和导出的数据一致性得到了有效的保证。
3. 数据备份与恢复功能测试:- 系统提供了数据备份和恢复的功能,并支持定期自动备份。
- 数据备份和恢复过程中,系统能够稳定运行且备份数据的完整性得到了保障。
4. 查询功能测试:- 系统支持灵活的查询语句,能够正确返回查询结果。
- 在大数据量和高并发的测试情况下,系统的查询性能依然可以保持在可接受范围内。
数据库查询优化性能测试说明
数据库查询优化性能测试说明数据库查询是计算机系统中非常常见的一种操作,而优化查询性能则是提高系统整体性能的重要途径之一。
本文将从测试的角度对数据库查询优化性能进行说明。
一、性能测试的目的性能测试的目的是评估系统在不同负载下的性能表现,了解系统的瓶颈及优化空间,从而提高系统的性能。
对于数据库查询性能优化,主要关注的指标有查询响应时间、查询吞吐量、并发查询数等。
二、性能测试的方法1. 针对不同类型的查询进行测试不同类型的查询对数据库性能的要求是不同的,例如简单查询、复杂查询、聚合查询等。
因此,针对不同类型的查询进行测试,能够更全面地了解系统的性能瓶颈。
2. 测试环境的设置测试环境的设置对于测试结果的准确性有着重要的影响。
需要确保测试环境与生产环境尽量一致,包括硬件配置、数据库版本及参数配置、网络环境等。
同时,需要模拟真实的负载情况,例如设置合理的并发数、模拟真实的查询请求等。
3. 测试工具的选择性能测试通常使用专业的性能测试工具进行,例如JMeter、LoadRunner等。
这些工具能够模拟真实的负载情况,对系统进行压力测试,从而得到真实可靠的性能数据。
4. 测试指标的选择对于数据库查询性能的测试而言,主要关注的指标有查询响应时间、查询吞吐量、并发查询数等。
响应时间是用户感知系统性能的重要指标,通过监控响应时间可以得知系统是否满足用户需求。
吞吐量是系统处理查询的能力,通过监控吞吐量可以评估系统的负载能力。
并发查询数是系统同时处理的查询数量,通过逐步增加并发查询数,可以了解系统的性能瓶颈。
三、性能测试的步骤1. 定义性能测试目标在进行性能测试之前,需要明确性能测试的目标。
例如,查询是否能在合理的时间内响应、是否能够处理大量的并发查询等。
2. 设计性能测试方案根据测试目标,设计合理的性能测试方案。
包括测试的类型、测试的场景、测试的工具及参数设置等。
同时,需要制定测试的计划及时间安排,确保测试的顺利进行。
MySQL数据库的性能监测和调优工具推荐
MySQL数据库的性能监测和调优工具推荐随着互联网的快速发展,大量的数据被存储在数据库中。
数据库的性能直接影响企业的运营效率和用户体验。
为了保证数据库的高性能运行,必须及时监测并调优数据库。
本文将介绍几种常用的MySQL数据库性能监测和调优工具,并分析其特点和适用场景。
一、MySQL性能监测工具1. MySQL WorkbenchMySQL Workbench是一款官方提供的免费工具,具有图形化界面,可以对MySQL数据库进行全面的性能监测和分析。
它可以监测数据库的各项指标,包括查询执行时间、连接数、IO操作等。
通过Workbench可以方便地诊断数据库性能问题,并提供相应的优化建议。
2. pt-query-digestpt-query-digest是Percona Toolkit中的一个工具,用于分析MySQL的慢查询日志。
它能够将慢查询日志文件转化为易读的报告,展示慢查询的统计信息和执行计划。
pt-query-digest可以帮助用户快速定位慢查询的原因,并优化相关的SQL语句,提高数据库的性能。
3. Performance SchemaPerformance Schema是MySQL官方引入的一种性能监测工具。
它可以实时监测MySQL数据库的性能指标,包括数据库连接、锁等待、缓冲区命中率等。
Performance Schema提供了一系列的表和视图,用于存储和展示性能监测数据,可以通过简单的SQL语句查询相关的信息。
4. sysbenchsysbench是一款开源的多线程性能测试工具,可以模拟大量的数据库负载,从而评估数据库的性能。
sysbench提供了多种测试模式,包括CPU计算、内存操作、磁盘IO、数据库压力测试等。
通过sysbench可以测量数据库在不同负载下的性能表现,并根据测试结果进行相应的优化。
二、MySQL性能调优工具1. pt-visual-explainpt-visual-explain是Percona Toolkit中的一个工具,用于可视化MySQL的SQL执行计划。
MySQL中的存储过程调试和优化
MySQL中的存储过程调试和优化MySQL是一种常用的关系型数据库管理系统,广泛应用于各种Web应用程序和企业级系统中。
在开发和维护MySQL数据库中的存储过程时,调试和优化是非常重要的环节。
本文将介绍MySQL中的存储过程调试和优化的方法和技巧。
一、存储过程调试1. 使用调试输出在存储过程中使用调试输出是最常见和简单的调试方法。
通过在存储过程中插入一些输出语句,我们可以观察并了解存储过程在执行过程中的变量值和执行流程。
例如,我们可以使用SELECT语句将一些变量值输出到控制台或日志文件中,以便进行调试。
2. 使用条件断点条件断点是一种高级调试技术,可以在满足指定条件的情况下自动中断程序的执行。
在MySQL中,我们可以通过设置存储过程中的IF语句来实现条件断点。
例如,我们可以在存储过程的关键位置插入一个IF语句,并设置一个变量的值作为断点条件,当满足条件时,存储过程会中断执行,以便我们观察程序的执行情况。
3. 使用调试工具除了手动调试之外,还可以使用一些专门的调试工具来帮助我们调试存储过程。
例如,MySQL提供了一个官方的调试器工具,可以与MySQL服务器进行交互,并提供了调试器的各种功能,如设置断点、单步执行、查看变量值等。
使用调试器工具可以大大提高我们的调试效率和准确性。
二、存储过程优化1. 减少查询次数在存储过程中,如果存在多个查询语句,那么通过减少查询次数可以降低数据库的负载和提高性能。
例如,我们可以通过使用JOIN语句将多个查询合并为一个查询,或者使用子查询来减少多次查询的次数。
另外,还可以使用缓存技术,将查询结果缓存起来,避免重复查询。
2. 使用索引索引是提高数据库查询性能的重要手段。
在存储过程中,我们可以通过使用索引来加快查询速度。
在MySQL中,可以通过在存储过程中的查询语句中使用关键词"INDEX"或"FORCE INDEX"来强制使用索引。
MySQL百万级数据的4种查询优化方式
MySQL百万级数据的4种查询优化⽅式⽬录⼀.limit越往后越慢的原因⼆.百万数据模拟1、创建员⼯表和部门表,编写存储过程插数据2.执⾏存储过程三.4种查询⽅式1.普通limit分页2.使⽤索引覆盖+⼦查询优化3.起始位置重定义4,降级策略(百度的做法)⼀.limit越往后越慢的原因当我们使⽤limit来对数据进⾏分页操作的时,会发现:查看前⼏页的时候,发现速度⾮常快,⽐如 limit 200,25,瞬间就出来了。
但是越往后,速度就越慢,特别是百万条之后,卡到不⾏,那这个是什么原理呢。
先看⼀下我们翻页翻到后⾯时,查询的sql是怎样的:select * from t_name where c_name1='xxx' order by c_name2 limit 2000000,25;这种查询的慢,其实是因为limit后⾯的偏移量太⼤导致的。
⽐如像上⾯的 limit 2000000,25 ,这个等同于数据库要扫描出2000025条数据,然后再丢弃前⾯的 20000000条数据,返回剩下25条数据给⽤户,这种取法明显不合理。
⼆.百万数据模拟1、创建员⼯表和部门表,编写存储过程插数据/*部门表,存在则进⾏删除 */drop table if EXISTS dep;create table dep(id int unsigned primary key auto_increment,depno mediumint unsigned not null default 0,depname varchar(20) not null default "",memo varchar(200) not null default "");/*员⼯表,存在则进⾏删除*/drop table if EXISTS emp;create table emp(id int unsigned primary key auto_increment,empno mediumint unsigned not null default 0,empname varchar(20) not null default "",job varchar(9) not null default "",mgr mediumint unsigned not null default 0,hiredate datetime not null,sal decimal(7,2) not null,comn decimal(7,2) not null,depno mediumint unsigned not null default 0);/* 产⽣随机字符串的函数*/DELIMITER $drop FUNCTION if EXISTS rand_string;CREATE FUNCTION rand_string(n INT) RETURNS VARCHAR(255)BEGINDECLARE chars_str VARCHAR(100) DEFAULT 'abcdefghijklmlopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ';DECLARE return_str VARCHAR(255) DEFAULT '';DECLARE i INT DEFAULT 0;WHILE i < n DOSET return_str = CONCAT(return_str,SUBSTRING(chars_str,FLOOR(1+RAND()*52),1));SET i = i+1;END WHILE;RETURN return_str;END $DELIMITER;/*产⽣随机部门编号的函数*/DELIMITER $drop FUNCTION if EXISTS rand_num;CREATE FUNCTION rand_num() RETURNS INT(5)BEGINDECLARE i INT DEFAULT 0;SET i = FLOOR(100+RAND()*10);RETURN i;END $DELIMITER;/*建⽴存储过程:往emp表中插⼊数据*/DELIMITER $drop PROCEDURE if EXISTS insert_emp;CREATE PROCEDURE insert_emp(IN START INT(10),IN max_num INT(10))BEGINDECLARE i INT DEFAULT 0;/*set autocommit =0 把autocommit设置成0,把默认提交关闭*/SET autocommit = 0;REPEATSET i = i + 1;INSERT INTO emp(empno,empname,job,mgr,hiredate,sal,comn,depno) VALUES ((START+i),rand_string(6),'SALEMAN',0001,now(),2000,400,rand_num()); UNTIL i = max_numEND REPEAT;COMMIT;END $DELIMITER;/*建⽴存储过程:往dep表中插⼊数据*/DELIMITER $drop PROCEDURE if EXISTS insert_dept;CREATE PROCEDURE insert_dept(IN START INT(10),IN max_num INT(10))BEGINDECLARE i INT DEFAULT 0;SET autocommit = 0;REPEATSET i = i+1;INSERT INTO dep( depno,depname,memo) VALUES((START+i),rand_string(10),rand_string(8));UNTIL i = max_numEND REPEAT;COMMIT;END $DELIMITER;2.执⾏存储过程/*插⼊120条数据*/call insert_dept(1,120);/*插⼊500W条数据*/call insert_emp(0,5000000);插⼊500万条数据可能很慢三.4种查询⽅式1.普通limit分页/*偏移量为100,取25*/SELECT a.empno,a.empname,a.job,a.sal,b.depno,b.depnamefrom emp a left join dep b on a.depno = b.depno order by a.id desc limit 100,25;/*偏移量为4800000,取25*/SELECT a.empno,a.empname,a.job,a.sal,b.depno,b.depnamefrom emp a left join dep b on a.depno = b.depno order by a.id desc limit 4800000,25;执⾏结果[SQL]SELECT a.empno,a.empname,a.job,a.sal,b.depno,b.depnamefrom emp a left join dep b on a.depno = b.depno order by a.id desc limit 100,25;受影响的⾏: 0时间: 0.001s[SQL]SELECT a.empno,a.empname,a.job,a.sal,b.depno,b.depnamefrom emp a left join dep b on a.depno = b.depno order by a.id desc limit 4800000,25;受影响的⾏: 0时间: 12.275s越往后,查询效率越慢2.使⽤索引覆盖+⼦查询优化因为我们有主键id,并且在上⾯建了索引,所以可以先在索引树中找到开始位置的 id值,再根据找到的id值查询⾏数据。
