mysql数据库数据批量插入的实现

 更新时间:2024年11月11日 10:17:14   作者:danYan_01  
本文介绍了在MySQL数据库中进行数据批量插入和性能测试的方法,包括使用Navicat批量插入数据、编写SQL测试、索引的创建和使用、查询测试以及提升SQL性能的优化方法,感兴趣的可以参考一下

0 、前言

在写sql语句的时候常常会有很多疑问,那就是当单表的数据量很大的时候,查询性能怎么样,以及索引对数据查询的影响,今天用navicat批量造了很多重复数据来对mysq在数据量大的时候查询的性能的测试。

1 、使用navicat批量插入数据

函数—>新建函数–>填写名,选择函数,点击完成

在这里插入图片描述

填写函数

CREATE DEFINER=`root`@`%` PROCEDURE `userDataInsert`()
BEGIN
	# 设置循环变量
   DECLARE i INT DEFAULT 0;
WHILE i<=100000 DO
 INSERT INTO sup_check(advertiser_id,check_time,record_types_id,dept_id) VALUES(20,'2024-04-09',1,203);
 SET i = i + 1;
END WHILE;
END

保存后点击运行即可,此处会执行时间较长,主要看你的主机性能,磁盘的读写速度等,最好在自己的本地虚拟机中去跑,节省时间。

2、编写sql测试

此sql就是单表的查询(嵌套子查询),根据年份然后按照年月去对数据进行一个分组,问gpt的时候,gpt说使用函数的时候进行的是全表的扫描,不走索引,此时很慌,很想测试一下,走索引和不走索引到底有什么区别

SELECT year(check_time) as year ,month(check_time) as month ,COUNT(*) as checkNum
FROM sup_check   
WHERE 
    (dept_id = 100 OR dept_id IN (SELECT t.dept_id FROM sys_dept t WHERE FIND_IN_SET(100,ancestors)))
    AND year(check_time) = 2024
GROUP BY year,month
ORDER BY year,month;

3、索引相关

单列索引

CREATE INDEX idx_check_time
ON sup_check (check_time);

复合索引

CREATE INDEX idx_column1_column2 ON sup_check (check_time, record_type_id);

唯一索引

CREATE UNIQUE INDEX uidx_column_name ON table_name (column_name);

全文索引

CREATE FULLTEXT INDEX ftx_column_name ON table_name (column_name);

使用表名 ,在某些情况下,你可能还想在索引名称中包含表名,尤其是在大型数据库中,这有助于避免索引名称冲突:

CREATE INDEX idx_table_name_column_name ON table_name (column_name);

注意事项
避免使用特殊字符:不要在索引名称中使用特殊字符,如 !, @, #, $, %, ^, &, *, (, ), -, +, =, {, }, [, ], |, , ;, :, ', ", , <, >, /, ?`。
长度限制:MySQL索引名称的最大长度是64个字符

查看索引

这将返回以下列:

  • Table:表名
  • Non_unique:如果索引不能包含重复值,则为0;如果可以,则为1。
  • Key_name:索引的名称。
  • Seq_in_index:索引中的列序列号。
  • Column_name:列名。
  • Collation:列如何排序,如果是定序的,则显示排序顺序;如果是未排序的,则显示NULL。
  • Cardinality:索引中唯一值的估计数量。
  • Sub_part:如果列只是部分索引,则为索引的字符数。如果是整个列被索引,则为NULL。
  • Packed:指示关键字如何被压缩,如果没有被压缩,则为NULL。
  • Null:如果列含有NULL,则显示YES。
  • Index_type:索引类型,如BTREE、FULLTEXT、HASH等。
  • Comment:索引的备注信息。
SHOW INDEX FROM table_name;

4、查询测试

建立完索引之后,我发现当查询出的数据量比较大的时候,查询指定数据的速度确实快了,但是当所查询出的字段多或者数据条数多的时候还是会耗费很长时间,那解决办法就是分页,一下查询出这么多条数据肯定慢,分页的话就特别快了。

SELECT year(check_time) as year ,month(check_time) as month ,COUNT(*) as checkNum
FROM sup_check   
WHERE 
    (dept_id = 100 OR dept_id IN (SELECT t.dept_id FROM sys_dept t WHERE FIND_IN_SET(100,ancestors)))
    AND year(check_time) = 2024
GROUP BY year,month
ORDER BY year,month;
LIMIT 20 OFFSET 0;

5、提升sql的办法

优化sql,经常查询的字段使用索引,查询出需要使用的字段,分页查询

6、探讨分页查询的基本实现原理

首先使用count(*) 查询出数据总条数,此查询是经过mysql优化过的,速度比较快,或者你去count(索引列)然后就是根据每页的数据大小计算出总的页数(int totalPages = (totalRecords + pageSize - 1) / pageSize;),然后就是执行分页查询,查询指定页的数据

到此这篇关于mysql数据库数据批量插入的实现的文章就介绍到这了,更多相关mysql 数据批量插入内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • MySQL查询数据(单表查询)详解

    MySQL查询数据(单表查询)详解

    这篇文章主要介绍了MySQL查询数据(单表查询)的相关知识,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2023-05-05
  • CentOS 7中源码安装MySQL 5.7.6+详细教程

    CentOS 7中源码安装MySQL 5.7.6+详细教程

    最近在CentOS 7中源码安装MySQL 5.7.6+,发现MySQL5.7.6+以后的安装方式真的与以前版本的MySQL安装方式大大的不同呀。不自己安装一把,你都不知道不同之处在哪,下面这篇文章是通过自己的安装过程总结的一篇安装教程,有需要的朋友们可以参考借鉴,下面来一起看看吧。
    2016-12-12
  • win10免安装版本的MySQL安装配置教程

    win10免安装版本的MySQL安装配置教程

    这篇文章主要为大家详细介绍了win10免安装版本的MySQL的下载安装和配置,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-01-01
  • Navicat Premium15连接云服务器中的数据库问题及遇到坑

    Navicat Premium15连接云服务器中的数据库问题及遇到坑

    这篇文章主要介绍了Navicat Premium15连接云服务器中的数据库问题及遇到坑,本文通过图文并茂的形式给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2021-03-03
  • mysql 8.0.11压缩包版本安装教程

    mysql 8.0.11压缩包版本安装教程

    这篇文章主要为大家详细介绍了mysql 8.0.11压缩包版本安装教程,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2018-05-05
  • asp采用ODBC接口访问MySQL的方法

    asp采用ODBC接口访问MySQL的方法

    asp采用ODBC接口访问MySQL的方法...
    2007-07-07
  • 分析mysql中一条SQL查询语句是如何执行的

    分析mysql中一条SQL查询语句是如何执行的

    为了充分发挥MySQL的性能并顺利地使用,就必须正确理解其设计思想,因此,了解MySQL的逻辑架构是必要的。本文将通过一条SQL查询语句的具体执行过程来详细介绍MySQL架构中的各个组件
    2021-06-06
  • MySQL延迟关联性能优化方法

    MySQL延迟关联性能优化方法

    这篇文章主要介绍了MySQL延迟关联性能优化方法,本文讲解了延迟关联的背景、延迟关联的分析、延迟关联的解决等内容,需要的朋友可以参考下
    2015-05-05
  • mysql charset=utf8你真的弄明白意思了吗

    mysql charset=utf8你真的弄明白意思了吗

    这篇文章主要介绍了mysql charset=utf8你真的弄明白意思了吗?文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-01-01
  • 利用Xtrabackup工具备份及恢复(MySQL DBA的必备工具)

    利用Xtrabackup工具备份及恢复(MySQL DBA的必备工具)

    Xtrabackup 是percona的一个开源项目,可以热备份innodb ,XtraDB,和MyISAM(会锁表),可以看做是InnoDB Hotbackup的免费替代品
    2013-04-04

最新评论