首页 > 数据库 >MySQL数据优化

MySQL数据优化

时间:2023-05-07 12:12:38浏览次数:37  
标签:10000 -- 优化 LIMIT student MySQL 数据 id SELECT

select * from student;


delete from student;


SELECT COUNT(1) from student;


SELECT * FROM `student` LIMIT 10000, 10

-- 0.674s
-- 0.033s
-- 0.031s


SELECT * FROM `student` LIMIT 10000, 10;
-- 0.031s
SELECT * FROM `student` LIMIT 10000, 100;
-- 0.032s
SELECT * FROM `student` LIMIT 10000, 1000;
-- 0.032
SELECT * FROM `student` LIMIT 10000, 10000;
-- 0.043s
SELECT * FROM `student` LIMIT 10000, 100000;
-- 0.158s
SELECT * FROM `student` LIMIT 10000, 1000000;
-- 1.584s

-- 总结:从上面结果可以得出结束:偏移量越大,花费时间越长


-- 优化偏移量大问题
-- 采用子查询方式
-- 我们可以先定位偏移位置的 id,然后再查询数据
SELECT * FROM `student` LIMIT 100000, 10;
-- 0.813s

SELECT id FROM `student` LIMIT 100000, 1;
-- 0.046s

SELECT * FROM `student` WHERE id >= (SELECT id FROM `student` LIMIT 100000, 1) LIMIT 10

-- 0.046s

-- 从上面结果得出结论:
-- 第一条花费的时间最大,第三条比第一条稍微好点
-- 子查询使用索引速度更快
-- 缺点:只适用于id递增的情况

 

-- id非递增的情况可以使用以下写法,但这种缺点是分页查询只能放在子查询里面
-- 注意:某些 mysql 版本不支持在 in 子句中使用 limit,所以采用了多个嵌套select
SELECT * FROM `student` WHERE id IN (SELECT t.id FROM (SELECT id FROM `user_operation_log` LIMIT 10000, 10) AS t)

-- 采用 id 限定方式
-- 这种方法要求更高些,id必须是连续递增,而且还得计算id的范围,然后使用 between,sql如下


SELECT * FROM `student` WHERE id between 100000 AND 100010 LIMIT 100

SELECT * FROM `student` WHERE id >= 100000 LIMIT 100


-- 从结果可以看出这种方式非常快
--
-- 注意:这里的 LIMIT 是限制了条数,没有采用偏移量

 


-- 优化数据量大问题
-- 返回结果的数据量也会直接影响速度

SELECT * FROM `student` LIMIT 1, 1000000
-- 1.798s

SELECT id FROM `student` LIMIT 1, 1000000


-- 1.005s
-- 从结果可以看出减少不需要的列,查询效率也可以得到明显提升
--
-- 第一条和第三条查询速度差不多,这时候你肯定会吐槽,那我还写那么多字段干啥呢,直接 * 不就完事了
--
-- 注意本人的 MySQL 服务器和客户端是在_同一台机器_上,所以查询数据相差不多,有条件的同学可以测测客户端与MySQL分开
--
-- SELECT * 它不香吗?
--
-- 在这里顺便补充一下为什么要禁止 SELECT *。难道简单无脑,它不香吗?
--
-- 主要两点:
--
-- 用 "SELECT * " 数据库需要解析更多的对象、字段、权限、属性等相关内容,在 SQL 语句复杂,硬解析较多的情况下,会对数据库造成沉重的负担。
-- 增大网络开销,* 有时会误带上如log、IconMD5之类的无用且大文本字段,数据传输size会几何增涨。特别是MySQL和应用程序不在同一台机器,这种开销非常明显。

 

 

-- 切换数据库
use bigfile;
-- 如果批量插入程序已存在,先删除
DROP PROCEDURE IF EXISTS BatchInsert;
delimiter $$ -- 定界符
CREATE PROCEDURE BatchInsert ( IN initId INT, IN loop_counts INT ) -- 假设initId=5, loop_counts循环数=100
BEGIN
DECLARE Var INT;
DECLARE ID INT;
SET Var = 0;
SET ID = initId;
SET autoCommit = 0; -- 关闭自动提交事务,提高插入效率
WHILE var < loop_counts do -- 相当于fori(i=0;i<100;i++),从0开始,到100结束,循环插入学生数据100条
insert into student (user_no, user_name, score, create_time, update_time, remark)
VALUES
(
CONCAT('学号', ID),
CONCAT( '姓名', ID ),
floor( 1 + rand()* 100 ),
date_add( '2020-01-01 11:29:00', INTERVAL round( rand() * 1000 + 1 ) DAY ), -- interval间隔范围:((0,1] * 1000 + 1) 1-1000以内随机间隔多少天
date_add( '2020-01-01 11:29:00', INTERVAL round( rand() * 1000 + 1 ) DAY ),
CONCAT ( "备注", ID ));
SET ID = ID + 1;-- id从5开始插入
SET Var = Var + 1;
END WHILE;
COMMIT;-- 提交
END $$;-- 结束 --只有收到“$$”才认为指令结束可以执行;默认情况下,delimiter是分号;,遇到分号就执行


-- 测试
delimiter ;
call BatchInsert(1, 1000000); -- 从id=1开始,插入11条

delimiter ;
call BatchInsert(11, 100000000); -- 从id=12开始,插入9条

 

标签:10000,--,优化,LIMIT,student,MySQL,数据,id,SELECT
From: https://www.cnblogs.com/ymsblog/p/17379104.html

相关文章

  • 1 数据分析引言 分解数据
    数据分析所有的数据分析师最终都会被打造成能作出更好决策的人才,你要学的就是在浩如烟海的数据中洞察先机,作出更好决策。客户将帮助你确定问题客户是分析结果的服务对象;客户将根据你的分析作决策;你需要尽量从他那里多了解一些信息,才能确定问题;你的客户可能:相当了解或......
  • 第二章:用电信号传输TCP/IP数据-02-连接:connect()
    一、连接是什么意思话说网线一直插着,网络一直连着,网线中随时都有信号流过,那这个“连接”是连接什么呢?可以类比人与人之间的联系,满大街都是人,身边随时有人走过,我们算是跟任何人有联系吗?当然没有!怎么才算有联系?先要双方有交往意愿,然后互换个名片,这才算联系上了。哪天一方找到另......
  • SLQ_C# DataAdapter数据适配器的4个属性
    DataAdapter数据适配器的4个属性:1.SelectCommand属性:向数据库发送查询SQL语句。2.DeleteCommand属性:向数据库发送删除SQL语句。3.InsertCommand属性:向数据库发送插入SQL语句。4.UpdateCommand属性:向数据库发送更新SQL语句。......
  • mysql error 1064(42000)
    mysql表里面,使用同样的语法查询一张表,用的nopcommerce的表,里面的Order表,查询的时候出不来,总是提示1064(42000说语法有错误,思考不会有错,于是查询这个问题,也有想过这张表名有些特殊, 查询要加反单引号,select*from`Order`;就查询出来了,可能Order是一个关键......
  • 使用 JavaScript连接Oracle 数据库(js连接oracle)
    原文链接 在建立Web交互应用程序时,一般使用JavaScript语言作为表现层,而Oracle作为背后真正的数据库。连接JavaScript和Oracle数据库需要一组技术,可以实现将JavaScript执行的数据请求发送到服务器上的Oracle数据库,这样就可以访问和操作Oracle数据库中的相关内容。 在建立Web......
  • realsense d435i获取imu数据
      #!/usr/bin/pythonfrom__future__importprint_functionimportnumpyasnpimportsysimportjsonimportctypesimportosimportbinasciiimportstructimportpyrealsense2asrsimportctypesimporttimeimportenumimportthreading#L515READ_TABL......
  • 基于PSO优化BP神经网络PID控制器matlab仿真
    1.算法仿真效果matlab2022a仿真结果如下:      2.算法涉及理论知识概要       PID控制器(比例-积分-微分控制器),由比例单元P、积分单元I和微分单元D组成。通过Kp,Ki和Kd三个参数的设定。PID控制器主要适用于基本线性和动态特性不随时间变化的系统。......
  • RUL预测常用数据集--C-MAPSS Dataset介绍
    C-MAPSS是针对航空发动机剩余寿命预测的数据集。该数据集由NASA(美国国家航空航天局)发布,包含了四个不同类型的航空发动机的传感器数据,以及相应的故障模式和剩余寿命数据,如表1所示。表1InformationoftheC-MAPSSdataset.DatasetFD001FD002FD003FD004Engineunit......
  • java基于ssm+vue的旅游管理系统、旅游资源网站、旅游网站管理系统,附源码+数据库+文档+
    1、项目介绍旅游资源网站的主要使用者分为管理员和用户,实现功能包括管理员:首页、个人中心、用户管理、景点信息管理、购票信息管理、酒店信息管理、客房类型管理、客房信息管理、客房预订管理、交流论坛、系统管理,用户:首页、个人中心、购票信息管理、客房预订管理、我的收藏管理,......
  • SQL 数据库连接设置
    SQL数据库连接设置第一步:设置Web.config<?xmlversion="1.0"?><!--有关如何配置ASP.NET应用程序的详细信息,请访问http://go.microsoft.com/fwlink/?LinkId=169433--><configuration><appSettings><addkey="ConnectionString1&qu......