MySQL查询速度测试->连接查询

快速生成大量数据

INSERT INTO tableName1(pn_code,belong_id,factory_number) SELECT pn_code,belong_id,factory_number FROM tableName1

四张表合计4000万条数据,

如果不带where,联查的速度是非常快的,前提是需要带limit,limit越小越快,

如果联查后带where 筛选,速度会非常慢,所以大数据量下,有where根据实际情况,可以分批进行查询

下面附带记得函数和存储过程备用

1.生成随机数字

#生成n个随机数字
DELIMITER $$
CREATE FUNCTION randNum(n int) RETURNS VARCHAR(255)
BEGIN
    DECLARE chars_str varchar(20) DEFAULT ‘0123456789‘;
    DECLARE return_str varchar(255) DEFAULT ‘‘;
    DECLARE i INT DEFAULT 0;
    WHILE i < n DO
        SET return_str = concat(return_str,substring(chars_str , FLOOR(1 + RAND()*10 ),1));
        SET i = i +1;
    END WHILE;
    RETURN return_str;
END $$
DELIMITER;

2.生成手机号码

#生成随机手机号码
# 定义常用的手机头 130 131 132 133 134 135 136 137 138 139 186 187 189 151 157
#SET starts = 1+floor(rand()*15)*4;   截取字符串的开始是从 1、5、9、13 ...开始的。floor(rand()*15)的取值范围是0~14
#SET head = substring(bodys,starts,3);在字符串bodys中从starts位置截取三位

DELIMITER $$
CREATE FUNCTION generatePhone() RETURNS varchar(20)
BEGIN
DECLARE head char(3);
DECLARE phone varchar(20);
DECLARE bodys varchar(100) default "130 131 132 133 134 135 136 137 138 139 186 187 189 151 157";
DECLARE starts int;
SET starts = 1+floor(rand()*15)*4;
SET head = trim(substring(bodys,starts,3));
SET phone = trim(concat(head,randNum(8)));
RETURN phone;
END $$
DELIMITER ;

3.生成随机字符串

#创建随机字符串和随机时间的函数
DELIMITER $$
CREATE FUNCTION `randStr`(n INT) RETURNS varchar(255) CHARSET utf8mb4
DETERMINISTIC
BEGIN
 DECLARE chars_str varchar(100) DEFAULT ‘abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789‘;
 DECLARE return_str varchar(255) DEFAULT ‘‘ ;
 DECLARE i INT DEFAULT 0;
 WHILE i < n DO
  SET return_str = concat(return_str, substring(chars_str, FLOOR(1 + RAND() * 62), 1));
  SET i = i + 1;
 END WHILE;
 RETURN return_str;
 END$$
 DELIMITER;

CSDN:https://blog.csdn.net/wuzhangweiss/article/details/101156910

原文地址:https://www.cnblogs.com/xyzxy/p/12592032.html

时间: 2024-10-08 06:05:43

MySQL查询速度测试->连接查询的相关文章

MySQL学习——SQL查询语句(连接查询&amp;子查询)(三)

一:连接查询: 连接查询是将俩个或者俩个以上的表按照某个条件连接起来,从中选择需要的数据,连接查询同时查询俩个或者俩个以上的表时使用,当不同的表中存在表示相同意义的字段时,可以通过该字段来连接这几个表,例如,学生表中有course_id字段来表示所学课程的课程号,课程表中有num字段来表示课程号,那么可以通过学生表中的course_id字段与课程表中的num字段来进行连接查询,连接查询包括内连接查询和外连接查询. 1.1 内连接查询 内连接查询是一种常用的连接查询,内连接查询可以查询俩个或者以上

mysql学习笔记之连接查询与子查询

mysql连接查询与子查询 1.子查询是指在另一个查询语句中的SELECT子句. 例句: SELECT * FROM t1 WHERE column1 = (SELECT column1 FROM t2); 其中,SELECT * FROM t1 ...称为Outer Query[外查询](或者Outer Statement), SELECT column1 FROM t2 称为Sub Query[子查询]. 所以,我们说子查询是嵌套在外查询内部.而事实上它有可能在子查询内部再嵌套子查询. 子查

003.分组统计查询和表连接查询

--分组统计查询 group by having 1 select 分组字段 ,聚合函数 2 having 后常跟聚合函数,也可以跟分组字段 3 where 后不可以直接跟聚合函数 4 where(筛选行) -group by (分组) -having (筛选组) --表连接查询 1 笛卡尔积 (交叉连接 cross join) a*b A) SELECT * FROM A,B B) SELECT * FROM A CROSS JOIN B 2 内连接 原理: 将两个表中关联字段相等的行查询出来

有时候子查询比左连接查询速度快

最近几天在优化数据库,有些数据表因为建立时候不合理导致查询的时候速度比较慢,比如三个表,三个表中数据最少的都是十万条,这些表在左联或者右联的时候速度可能需要几秒钟,再加上where条件,条件中再加or,这时候速度是非常的慢的,往往需要10秒以上,这时候可以用子查询或者union 或者union all 代替,根据情况而定 比如这个语句用子查询速度就比较快 原来的语句: select K.EmployeeNumber, K.PositionName, K.Name, K.SkillWages, k

菜鸟笔记——纠结的左外连接查询和右外连接查询

1.前言 外连接查询也是很基础的知识,可是我也花了几个小时才理解透.在本文不太过多用书本语言来描述,我会以自己的思维理解和描述该知识 2.引出  首先,连接查询的方法也有很多.但是有些知识点学了,我们必须清楚会在什么情况下用到. 例:查询没有参加考试的学生信息.  按常规的做法内连接查询是无法得到的,为什么?因为内连接查询时,数据结果集是匹配条件列相等的数据.如果某行数据匹配的列的值不相等,那么行 数据将不会显示.这时候就需要用到外连接查询. 3.什么是做表?什么是右表? 写在关键字Left j

mysql/mariadb学习记录——连接查询(JOIN)

//本文使用的数据表格//persons表中id_p为主键//orders表中id_o为主键,id_p为外键参考persons表中的id_p mysql> select * from persons;select * from orders; +------+----------+-----------+----------------+----------+ | id_p | lastname | firstname | address | city | +------+----------+

mysql 三个表连接查询

权限表(permission)10 字段名称 类型 约束 描述 authorityid integer Pk not null 权限流水号id    PK userNameId int not null 用户名id   FK functionid integer Not null 功能 id    FK lookPermission int not null 浏览 addPermission int not null 添加 editPermission int not null 编辑 delet

MYSQL not in子连接查询不到值的问题

前几天在项目中,做数据导入时,发现not in和in 查出来的条数不互补.ATABLE2明明中有些记录在ATABLE3中不存在,但是not in时查不出记录. CREATE TABLE ATABLE2   ( "MRID" VARCHAR2(20 BYTE)   ) CREATE TABLE ATABLE3"   ( "MRID" VARCHAR2(20 BYTE)   ) 查询语句如下 select count(*) from atable2 where

mysql left join 左连接查询关联n多张表

eft join 左连接即以左表为基准,显示坐标所有的行,右表与左表关联的数据会显示,不关联的则不显示.关键字为left join on. **基本用法如下: select table a left join table b on a.id = b.ta_id** 注意:1??其中on后面关联的字段应该是同一字段(两表关联的外键) 2??由于以左表为基准,左表一条记录如果对应右表多条记录,那查出的数据中右表的数据也只显示一条,如果要都显示,可以用group_contact()将字段用逗号隔开显示