sql优化-单表优化

news2024/11/17 17:29:01

文章目录

  • 0、索引优化原则
  • 1、在docker内部连接mysql
  • 2、数据准备
  • 3、创建表 dept 和 emp
  • 4、插入50万数据到 emp 表中
    • 4.1、创建函数
    • 4.2、存储过程
    • 4.3、调用存储过程
  • 5、查找姓名以"abc"开头的员工信息
    • 5.1、执行计划 select * from emp where name like 'abc%';
    • 5.2、sql优化:对条件字段name创建索引
    • 5.3、使用name索引查询 select * from emp where name like 'abc%'
  • 6、如果员工的姓名的前三位是abc 那么他就满足要求
  • 7、查找姓名含有"abc"的员工信息
  • 8、查找年龄不等于25的员工
    • 8.1、执行计划 elect * from emp where age!=25
    • 8.2、sql优化:对条件字段age创建索引
    • 8.3、再次执行计划 elect * from emp where age!=25
  • 9、查找姓名不为空的员工信息
  • 10、查找姓名等于"123"的员工信息
  • 11、mp通过querywrapper生成的动态sql 如果传入的参数类型和数据库字段类型不一致 是否会导致索引失效?

0、索引优化原则

  1. 对索引列进行计算函数处理类型转换都会导致索引失效,转向全表扫描
  2. like模糊查询时,以通配符开始(_、%)会导致索引失效,变成全表扫描
  3. 不等于!=不等于<>is not nullnot exists 会导致索引失效
  4. 字符串不加单引号索引失效
  5. sql优化:对条件字段创建索引

1、在docker内部连接mysql

[root@localhost ~]# docker exec -it spzx-mysql /bin/bash
root@ab66508d9441:/# mysql -uroot -p
Enter password: 
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 720
Server version: 8.0.27 MySQL Community Server - GPL

Copyright (c) 2000, 2021, Oracle and/or its affiliates.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql> 

2、数据准备

CREATE TABLE `dept` (
	`id` INT(11) NOT NULL AUTO_INCREMENT,
	`deptName` VARCHAR(30) DEFAULT NULL,
	`address` VARCHAR(40) DEFAULT NULL,
	ceo INT NULL ,
	PRIMARY KEY (`id`)
) ENGINE=INNODB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8;

CREATE TABLE `emp` (
	`id` INT(11) NOT NULL AUTO_INCREMENT,
	`empno` INT NOT NULL ,
	`name` VARCHAR(20) DEFAULT NULL,
	`age` INT(3) DEFAULT NULL,
	`deptId` INT(11) DEFAULT NULL,
	PRIMARY KEY (`id`)
	#CONSTRAINT `fk_dept_id` FOREIGN KEY (`deptId`) REFERENCES `t_dept` (`id`)
) ENGINE=INNODB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8;

3、创建表 dept 和 emp

mysql> CREATE TABLE `dept` (
    -> `id` INT(11) NOT NULL AUTO_INCREMENT,
    -> `deptName` VARCHAR(30) DEFAULT NULL,
    -> `address` VARCHAR(40) DEFAULT NULL,
    -> ceo INT NULL ,
    -> PRIMARY KEY (`id`)
    -> ) ENGINE=INNODB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8;
Query OK, 0 rows affected, 2 warnings (1.16 sec)

mysql> CREATE TABLE `emp` (
    -> `id` INT(11) NOT NULL AUTO_INCREMENT,
    -> `empno` INT NOT NULL ,
    -> `name` VARCHAR(20) DEFAULT NULL,
    -> `age` INT(3) DEFAULT NULL,
    -> `deptId` INT(11) DEFAULT NULL,
    -> PRIMARY KEY (`id`)
    -> #CONSTRAINT `fk_dept_id` FOREIGN KEY (`deptId`) REFERENCES `t_dept` (`id`)
    -> ) ENGINE=INNODB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8;
Query OK, 0 rows affected, 4 warnings (0.24 sec)

4、插入50万数据到 emp 表中

4.1、创建函数

set global log_bin_trust_function_creators=1; 
# 随机产生字符串
DELIMITER $$
CREATE FUNCTION rand_string(n INT) RETURNS VARCHAR(255)
BEGIN    
	DECLARE chars_str VARCHAR(100) DEFAULT 'abcdefghijklmnopqrstuvwxyzABCDEFJHIJKLMNOPQRSTUVWXYZ';
	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()*52),1));  
		SET i = i + 1;
	END WHILE;
	RETURN return_str;
END $$

#用于随机产生区间数字
DELIMITER $$
CREATE FUNCTION rand_num (from_num INT ,to_num INT) RETURNS INT(11)
BEGIN   
 DECLARE i INT DEFAULT 0;  
 SET i = FLOOR(from_num +RAND()*(to_num -from_num+1));
RETURN i;  
END$$

#假如要删除
#drop function rand_string;
#drop function rand_num;

4.2、存储过程

# 插入员工存储过程
DELIMITER $$
CREATE PROCEDURE  insert_emp(START INT, max_num INT)
BEGIN  
	DECLARE i INT DEFAULT 0;   
	#set autocommit =0 把autocommit设置成0  
	SET autocommit = 0;    
	REPEAT  
		SET i = i + 1;  
		INSERT INTO emp (empno, NAME, age, deptid ) VALUES ((START+i) ,rand_string(6), rand_num(30,50), rand_num(1,10000));  
		UNTIL i = max_num  
	END REPEAT;  
	COMMIT;  
END$$
 
#删除
# DELIMITER ;
# drop PROCEDURE insert_emp;

 
#往dept表添加随机数据
DELIMITER $$
CREATE PROCEDURE `insert_dept`(max_num INT)
BEGIN  
	DECLARE i INT DEFAULT 0;   
	SET autocommit = 0;    
	REPEAT  
		SET i = i + 1;  
		INSERT INTO dept ( deptname,address,ceo ) VALUES (rand_string(8),rand_string(10),rand_num(1,500000));  
		UNTIL i = max_num  
	END REPEAT;  
	COMMIT;  
END$$
 
#删除
# DELIMITER ;
# drop PROCEDURE insert_dept;

4.3、调用存储过程

#执行存储过程,往dept表添加1万条数据
DELIMITER ;
CALL insert_dept(10000); 

#执行存储过程,往emp表添加50万条数据
DELIMITER ;
CALL insert_emp(100000,500000); 

5、查找姓名以"abc"开头的员工信息

mysql> select * from emp where name like 'abc%';
+--------+--------+--------+------+--------+
| id     | empno  | name   | age  | deptId |
+--------+--------+--------+------+--------+
|   8186 | 108186 | abckRF |   40 |   7162 |
|  60377 | 160377 | aBClvt |   44 |   2887 |
| 101035 | 201035 | abciJX |   45 |   7511 |
| 102248 | 202248 | ABcJmh |   30 |   6740 |
| 116003 | 216003 | ABcLxd |   50 |   7498 |
| 143871 | 243871 | aBCktn |   33 |     97 |
| 148663 | 248663 | AbCLVx |   40 |    691 |
| 155165 | 255165 | aBCjmJ |   43 |   2861 |
| 182915 | 282915 | aBCjnN |   31 |   9787 |
| 196153 | 296153 | abclXg |   45 |   2800 |
| 212956 | 312956 | AbCLWA |   46 |   3406 |
| 253174 | 353174 | AbCKSj |   36 |    660 |
| 323480 | 423480 | aBClxC |   38 |   3357 |
| 332790 | 432790 | ABcIjU |   49 |   9672 |
| 342022 | 442022 | AbCIHn |   37 |   9104 |
| 346928 | 446928 | ABcKtO |   45 |   3330 |
| 352803 | 452803 | AbCLVw |   38 |   7207 |
| 353917 | 453917 | abclUS |   42 |   3634 |
| 383781 | 483781 | ABcKtO |   46 |   5384 |
| 388356 | 488356 | ABcIjU |   49 |    541 |
| 389827 | 489827 | aBCjmH |   40 |   6501 |
| 435658 | 535658 | ABcKsH |   34 |    435 |
| 440021 | 540021 | ABcJor |   47 |   1907 |
| 449413 | 549413 | abckQB |   34 |   4615 |
| 496441 | 596441 | aBClwC |   38 |   3105 |
+--------+--------+--------+------+--------+
25 rows in set (0.17 sec)

花费0.17秒

5.1、执行计划 select * from emp where name like ‘abc%’;

mysql> explain select * from emp where name like 'abc%';
+----+-------------+-------+------------+------+---------------+------+---------+------+--------+----------+-------------+
| id | select_type | table | partitions | type | possible_keys | key  | key_len | ref  | rows   | filtered | Extra       |
+----+-------------+-------+------------+------+---------------+------+---------+------+--------+----------+-------------+
|  1 | SIMPLE      | emp   | NULL       | ALL  | NULL          | NULL | NULL    | NULL | 499086 |    11.11 | Using where |
+----+-------------+-------+------------+------+---------------+------+---------+------+--------+----------+-------------+
1 row in set, 1 warning (0.00 sec)

5.2、sql优化:对条件字段name创建索引

mysql> create index idx_name on emp(name);
Query OK, 0 rows affected (4 min 31.82 sec)
Records: 0  Duplicates: 0  Warnings: 0

mysql> explain select * from emp where name like 'abc%';
+----+-------------+-------+------------+-------+---------------+----------+---------+------+------+----------+-----------------------+
| id | select_type | table | partitions | type  | possible_keys | key      | key_len | ref  | rows | filtered | Extra                 |
+----+-------------+-------+------------+-------+---------------+----------+---------+------+------+----------+-----------------------+
|  1 | SIMPLE      | emp   | NULL       | range | idx_name      | idx_name | 63      | NULL |   25 |   100.00 | Using index condition |
+----+-------------+-------+------------+-------+---------------+----------+---------+------+------+----------+-----------------------+
1 row in set, 1 warning (0.00 sec)

5.3、使用name索引查询 select * from emp where name like ‘abc%’

mysql> select * from emp where name like 'abc%';
+--------+--------+--------+------+--------+
| id     | empno  | name   | age  | deptId |
+--------+--------+--------+------+--------+
| 342022 | 442022 | AbCIHn |   37 |   9104 |
| 332790 | 432790 | ABcIjU |   49 |   9672 |
| 388356 | 488356 | ABcIjU |   49 |    541 |
| 101035 | 201035 | abciJX |   45 |   7511 |
| 102248 | 202248 | ABcJmh |   30 |   6740 |
| 389827 | 489827 | aBCjmH |   40 |   6501 |
| 155165 | 255165 | aBCjmJ |   43 |   2861 |
| 182915 | 282915 | aBCjnN |   31 |   9787 |
| 440021 | 540021 | ABcJor |   47 |   1907 |
| 449413 | 549413 | abckQB |   34 |   4615 |
|   8186 | 108186 | abckRF |   40 |   7162 |
| 435658 | 535658 | ABcKsH |   34 |    435 |
| 253174 | 353174 | AbCKSj |   36 |    660 |
| 143871 | 243871 | aBCktn |   33 |     97 |
| 346928 | 446928 | ABcKtO |   45 |   3330 |
| 383781 | 483781 | ABcKtO |   46 |   5384 |
| 353917 | 453917 | abclUS |   42 |   3634 |
|  60377 | 160377 | aBClvt |   44 |   2887 |
| 352803 | 452803 | AbCLVw |   38 |   7207 |
| 148663 | 248663 | AbCLVx |   40 |    691 |
| 212956 | 312956 | AbCLWA |   46 |   3406 |
| 496441 | 596441 | aBClwC |   38 |   3105 |
| 323480 | 423480 | aBClxC |   38 |   3357 |
| 116003 | 216003 | ABcLxd |   50 |   7498 |
| 196153 | 296153 | abclXg |   45 |   2800 |
+--------+--------+--------+------+--------+
25 rows in set (0.00 sec)

name加索引耗时0秒,name不加索引耗时0.17秒

6、如果员工的姓名的前三位是abc 那么他就满足要求

mysql> select * from emp where left(name,3) = 'abc';
+--------+--------+--------+------+--------+
| id     | empno  | name   | age  | deptId |
+--------+--------+--------+------+--------+
|   8186 | 108186 | abckRF |   40 |   7162 |
|  60377 | 160377 | aBClvt |   44 |   2887 |
| 101035 | 201035 | abciJX |   45 |   7511 |
| 102248 | 202248 | ABcJmh |   30 |   6740 |
| 116003 | 216003 | ABcLxd |   50 |   7498 |
| 143871 | 243871 | aBCktn |   33 |     97 |
| 148663 | 248663 | AbCLVx |   40 |    691 |
| 155165 | 255165 | aBCjmJ |   43 |   2861 |
| 182915 | 282915 | aBCjnN |   31 |   9787 |
| 196153 | 296153 | abclXg |   45 |   2800 |
| 212956 | 312956 | AbCLWA |   46 |   3406 |
| 253174 | 353174 | AbCKSj |   36 |    660 |
| 323480 | 423480 | aBClxC |   38 |   3357 |
| 332790 | 432790 | ABcIjU |   49 |   9672 |
| 342022 | 442022 | AbCIHn |   37 |   9104 |
| 346928 | 446928 | ABcKtO |   45 |   3330 |
| 352803 | 452803 | AbCLVw |   38 |   7207 |
| 353917 | 453917 | abclUS |   42 |   3634 |
| 383781 | 483781 | ABcKtO |   46 |   5384 |
| 388356 | 488356 | ABcIjU |   49 |    541 |
| 389827 | 489827 | aBCjmH |   40 |   6501 |
| 435658 | 535658 | ABcKsH |   34 |    435 |
| 440021 | 540021 | ABcJor |   47 |   1907 |
| 449413 | 549413 | abckQB |   34 |   4615 |
| 496441 | 596441 | aBClwC |   38 |   3105 |
+--------+--------+--------+------+--------+
25 rows in set (0.19 sec)

mysql> explain select * from emp where left(name,3) = 'abc';
+----+-------------+-------+------------+------+---------------+------+---------+------+--------+----------+-------------+
| id | select_type | table | partitions | type | possible_keys | key  | key_len | ref  | rows   | filtered | Extra       |
+----+-------------+-------+------------+------+---------------+------+---------+------+--------+----------+-------------+
|  1 | SIMPLE      | emp   | NULL       | ALL  | NULL          | NULL | NULL    | NULL | 499086 |   100.00 | Using where |
+----+-------------+-------+------------+------+---------------+------+---------+------+--------+----------+-------------+
1 row in set, 1 warning (0.00 sec)

left(name,3)函数被用来获取name字段值的最左边(也就是开头)的3个字符,然后这个结果被与字符串’abc’进行比较。只有当name字段的前3个字符恰好是’abc’时,相应的记录才会被选中并返回。
left函数:这是一个字符串函数,用于从字符串的左边开始提取指定数量的字符。在这个例子中,它从name字段的每个值中提取前3个字符

对索引列进行计算函数处理类型转换都会导致索引失效

索引列上的函数操作:在查询条件中对索引列使用了LEFT函数,这可能导致索引无法被有效利用。优化方法是尽量避免在索引列上进行函数操作,或者考虑创建一个函数索引来覆盖这种查询。

7、查找姓名含有"abc"的员工信息

mysql> explain select * from emp where name like '_abc%';
+----+-------------+-------+------------+------+---------------+------+---------+------+--------+----------+-------------+
| id | select_type | table | partitions | type | possible_keys | key  | key_len | ref  | rows   | filtered | Extra       |
+----+-------------+-------+------------+------+---------------+------+---------+------+--------+----------+-------------+
|  1 | SIMPLE      | emp   | NULL       | ALL  | NULL          | NULL | NULL    | NULL | 499086 |    11.11 | Using where |
+----+-------------+-------+------------+------+---------------+------+---------+------+--------+----------+-------------+
1 row in set, 1 warning (0.00 sec)

mysql> explain select * from emp where name like '%abc%';
+----+-------------+-------+------------+------+---------------+------+---------+------+--------+----------+-------------+
| id | select_type | table | partitions | type | possible_keys | key  | key_len | ref  | rows   | filtered | Extra       |
+----+-------------+-------+------------+------+---------------+------+---------+------+--------+----------+-------------+
|  1 | SIMPLE      | emp   | NULL       | ALL  | NULL          | NULL | NULL    | NULL | 499086 |    11.11 | Using where |
+----+-------------+-------+------------+------+---------------+------+---------+------+--------+----------+-------------+
1 row in set, 1 warning (0.00 sec)

like模糊查询时,以通配符(_、%)开始会导致索引失效

8、查找年龄不等于25的员工

8.1、执行计划 elect * from emp where age!=25

mysql> explain select * from emp where age!=25;
+----+-------------+-------+------------+------+---------------+------+---------+------+--------+----------+-------------+
| id | select_type | table | partitions | type | possible_keys | key  | key_len | ref  | rows   | filtered | Extra       |
+----+-------------+-------+------------+------+---------------+------+---------+------+--------+----------+-------------+
|  1 | SIMPLE      | emp   | NULL       | ALL  | NULL          | NULL | NULL    | NULL | 499086 |    90.00 | Using where |
+----+-------------+-------+------------+------+---------------+------+---------+------+--------+----------+-------------+
1 row in set, 1 warning (0.00 sec)

8.2、sql优化:对条件字段age创建索引

mysql> create index idx_age on emp(age);
Query OK, 0 rows affected (1.92 sec)
Records: 0  Duplicates: 0  Warnings: 0

mysql> show index from emp;
+-------+------------+----------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+---------------+---------+------------+
| Table | Non_unique | Key_name | Seq_in_index | Column_name | Collation | Cardinality | Sub_part | Packed | Null | Index_type | Comment | Index_comment | Visible | Expression |
+-------+------------+----------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+---------------+---------+------------+
| emp   |          0 | PRIMARY  |            1 | id          | A         |      499086 |     NULL |   NULL |      | BTREE      |         |               | YES     | NULL       |
| emp   |          1 | idx_name |            1 | name        | A         |      338680 |     NULL |   NULL | YES  | BTREE      |         |               | YES     | NULL       |
| emp   |          1 | idx_age  |            1 | age         | A         |          20 |     NULL |   NULL | YES  | BTREE      |         |               | YES     | NULL       |
+-------+------------+----------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+---------------+---------+------------+
3 rows in set (0.07 sec)

8.3、再次执行计划 elect * from emp where age!=25

mysql> explain select * from emp where age!=25;
+----+-------------+-------+------------+------+---------------+------+---------+------+--------+----------+-------------+
| id | select_type | table | partitions | type | possible_keys | key  | key_len | ref  | rows   | filtered | Extra       |
+----+-------------+-------+------------+------+---------------+------+---------+------+--------+----------+-------------+
|  1 | SIMPLE      | emp   | NULL       | ALL  | idx_age       | NULL | NULL    | NULL | 499086 |    50.00 | Using where |
+----+-------------+-------+------------+------+---------------+------+---------+------+--------+----------+-------------+
1 row in set, 1 warning (0.00 sec)

还是没有走索引,只是可能会走索引idx_age
!= 会导致索引失效

9、查找姓名不为空的员工信息

mysql> explain select * from emp where name is not null;
+----+-------------+-------+------------+------+---------------+------+---------+------+--------+----------+-------------+
| id | select_type | table | partitions | type | possible_keys | key  | key_len | ref  | rows   | filtered | Extra       |
+----+-------------+-------+------------+------+---------------+------+---------+------+--------+----------+-------------+
|  1 | SIMPLE      | emp   | NULL       | ALL  | idx_name      | NULL | NULL    | NULL | 499086 |    50.00 | Using where |
+----+-------------+-------+------------+------+---------------+------+---------+------+--------+----------+-------------+
1 row in set, 1 warning (0.00 sec)

is not null 会导致索引失效

10、查找姓名等于"123"的员工信息

mysql> explain select * from emp where name=123;
+----+-------------+-------+------------+------+---------------+------+---------+------+--------+----------+-------------+
| id | select_type | table | partitions | type | possible_keys | key  | key_len | ref  | rows   | filtered | Extra       |
+----+-------------+-------+------------+------+---------------+------+---------+------+--------+----------+-------------+
|  1 | SIMPLE      | emp   | NULL       | ALL  | idx_name      | NULL | NULL    | NULL | 499086 |    10.00 | Using where |
+----+-------------+-------+------------+------+---------------+------+---------+------+--------+----------+-------------+
1 row in set, 3 warnings (0.00 sec)

确保数据类型匹配:如果name列是字符串类型(如VARCHAR),你应该确保在查询中使用字符串类型的值。例如SELECT * FROM emp WHERE name = '123';
此时发生了类型转换

11、mp通过querywrapper生成的动态sql 如果传入的参数类型和数据库字段类型不一致 是否会导致索引失效?

一般不会:设置参数时一般通过对象携带,对象参数数据库表创建。
设置条件后,querywrapper会根据实体类字段类型 以preparedStatement预编译方式设置参数,保证参数类型转换成了数据库表字段类型。在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1891796.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

容器部署rabbitmq集群迁移

1、场景&#xff1a; 因业务需要&#xff0c;要求把rabbitmq-A集群上的数据迁移到rabbitmq-B集群上&#xff0c;rabbitmq的数据包括元数据&#xff08;RabbitMQ用户、vhost、队列、交换和绑定&#xff09;和消息数据&#xff0c;而消息数据存储在单独的消息存储库中。 2、迁移要…

大模型备案全网最详细流程【附附件】

本文要点&#xff1a;大模型备案最详细说明&#xff0c;大模型备案条件有哪些&#xff0c;《算法安全自评估报告》模板&#xff0c;大模型算法备案&#xff0c;大模型上线备案&#xff0c;生成式人工智能(大语言模型)安全评估要点&#xff0c;网信办大模型备案。 大模型备案安…

火山云存储TOS前端预签名上传文件

使用POSTMAN中的PUT方法&#xff0c;Body选择binary, 然后添加文件&#xff0c;可以上传图片&#xff0c;视频&#xff0c;音频等

大模型概述-定义/分类/训练/应用

大模型概述 随着时代的发展, 大模型各个领域的应用正在不断扩大. 本文尽力梳理各种材料, 将从概念定义, 类型分类, 训练以及应用等方面对大模型进行一个简要的概述. 如果你想了解大模型但是却缺乏基础的知识或者觉得无从下手, 那么阅读该文章可能对你有所帮助. 如果想了解更多…

SQL Server数据库的组成

《SQL Server 2022从入门到精通&#xff08;视频教学超值版&#xff09;》图书介绍-CSDN博客 对于数据库的概念&#xff0c;没有一个完全固定的定义&#xff0c;随着数据库历史的发展&#xff0c;定义的内容也有很大的差异&#xff0c;其中一种比较普遍的观点认为&#xff0c;…

Halcon OCR字符识别(极坐标转换,字符识别)

Halcon OCR字符识别&#xff08;极坐标转换&#xff0c;字符识别&#xff09; 代码 * 1.加载图片 *************************************************** dev_close_window () read_image (Image, ./img) get_image_size (Image, Width, Height) dev_get_window (WindowHandle…

153. 寻找旋转排序数组中的最小值(中等)

153. 寻找旋转排序数组中的最小值 1. 题目描述2.详细题解3.代码实现3.1 Python3.2 Java 1. 题目描述 题目中转&#xff1a;153. 寻找旋转排序数组中的最小值 2.详细题解 如果不考虑 O ( l o g n ) O(log n) O(logn)的时间复杂度&#xff0c;直接 O ( n ) O(n) O(n)时间复杂…

Springboot+Vue3开发学习笔记《1》

SpringbootVue3开发学习笔记《1》 博主正在学习SpringbootVue3开发&#xff0c;希望记录自己学习过程同时与广大网友共同学习讨论。 一、前置条件 博主所用版本&#xff1a; IDEA需要破解&#xff0c;破解工具链接容易挂&#xff0c;关注私聊我单发。 Spring Boot是Spring提…

「媒体邀约」天津媒体资源?媒体邀约宣传报道

传媒如春雨&#xff0c;润物细无声&#xff0c;大家好&#xff0c;我是51媒体网胡老师。 媒体宣传加速季&#xff0c;100万补贴享不停&#xff0c;一手媒体资源&#xff0c;全国100城线下落地执行。详情请联系胡老师。 天津拥有丰富的媒体资源&#xff0c;利用这些资源进行有效…

C语言 -- 函数

C语言 -- 函数 1. 函数的概念2. 库函数2.1 标准库和头文件2.2 库函数的使用方法2.2.1 功能2.2.2 头文件包含2.2.3 实践2.2.4 库函数文档的一般格式 3. 自定义函数3.1 函数的语法形式3.2 函数的举例 4. 形参和实参4.1 实参4.2 形参4.3 实参和形参的关系 5. return 语句6. 数组做…

7.2 数据结构

作业 #include <stdio.h> #include <string.h> #include <stdlib.h> struct student {char name[32];int age;double score; }s[3];void stu_input(struct student *s,int n) {printf("请输入%d个学生的信息&#xff08;姓名&#xff0c;年龄&#xff0…

Python爬虫系列-让爬虫自己写爬虫(半自动化,代替人工写爬虫)

现在的PC、手机客户端等终端设备大量使用了网页前后端技术&#xff0c;另外主流的网站也会经常会更新&#xff0c;导致以前一个月更新一次爬虫代码&#xff0c;变成了天天需要更新代码&#xff0c;所以自动化爬虫技术在当前就显得特别重要&#xff0c;最近我也是在多次更新某个…

Linux高并发服务器开发(十一)UDP通信和本地socket通信

文章目录 1 TCP和UDP的区别2 UDPAPI流程服务端流程客户端流程 代码服务端客户端 3 本地socket通信服务端客户端客户端代码 1 TCP和UDP的区别 2 UDP API 流程 服务端流程 客户端流程 代码 服务端 #include<sys/socket.h> #include<stdio.h> #include<arpa/in…

R语言学习,入门

我是一名6年开发经验的程序员&#xff0c;后端&#xff0c;大数据&#xff0c;前端都会。 现在加入了医疗行业&#xff0c;要做数据分析&#xff0c;前同事的实验室生信专业的&#xff0c;用的是R语言&#xff0c;为了跑通他的程序。就来学一下吧&#xff0c;看了一下好像挺简…

【网络安全的神秘世界】SQL注入(下)

&#x1f31d;博客主页&#xff1a;泥菩萨 &#x1f496;专栏&#xff1a;Linux探索之旅 | 网络安全的神秘世界 | 专接本 | 每天学会一个渗透测试工具 3.7 二次注入 不好挖这个漏洞&#xff0c;需要搞懂业务逻辑关系 二次注入通常是指在存入数据库时做了过滤&#xff0c;但是取…

介绍东芝TB62262FTAG芯片:高性能两相双极步进电机驱动器

在当今快速发展的科技领域&#xff0c;高性能的电机驱动器对于许多工程项目来说至关重要。东芝的TB62262FTAG这款两相双极步进电机驱动器采用PWM斩波技术&#xff0c;集成了多个先进功能&#xff0c;适用于各种工业和消费类应用。本文将详细介绍TB62262FTAG的参数、性能、优势及…

JVM原理(十三):JVM虚拟机类类加载器与双亲委派模型

1. 类加载器 Java虛拟机设计团队有意把类加载阶段中的“通过一个类的全限定名来获取描述该类的二进制字节流"这个动作放到Java虚拟机外部去实现&#xff0c;以便让应用程序自己决定如何去获取所需的类。实现这个动作的代码被称为“类加载器”(Class Loader)。 对于任意一…

任天堂称未来第一方游戏不会使用生成式AI

虽然EA、育碧、暴雪、Embracer等西方游戏厂商都大力支持生成式AI技术&#xff0c;但日本老牌游戏公司任天堂并不会追随这一步伐。任天堂已经确认该公司未来的第一方游戏不会使用生成式AI技术。 在公司最近的投资人问答会上&#xff0c;任天堂描绘了公司未来游戏愿景。在谈到AI技…

00 如何根据规律在变化中求发展?

你好&#xff0c;我是周大壮。目前&#xff0c;我已在搜索推荐等算法技术领域从事研发近 10 年&#xff0c;做过诸多流量分发领域的算法技术工作。 如今任公司同城的算法架构师、技术委员会人工智能分会委员、公司本地服务事业群算法策略部负责人&#xff0c;我主要负责公司集…