sql优化-单表优化

文章目录

  • 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 - GPLCopyright (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: 0mysql> 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: 0mysql> 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.mzph.cn/web/39268.shtml

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

相关文章

React+TS前台项目实战(二十四)-- 全局常用绘制组件Qrcode封装

文章目录 前言Qrcode组件1. 功能分析2. 代码详细注释3. 使用方式4. 效果展示(pc端 / 移动端) 总结 前言 今天要封装的Qrcode 组件&#xff0c;是通过传入的信息&#xff0c;绘制在二维码上&#xff0c;可用于很多场景&#xff0c;如区块链项目中的区块显示交易地址时就可以用到…

无线领夹麦克风哪个品牌好,推荐口碑最好的麦克风品牌

在5G网络普及的浪潮下&#xff0c;短视频平台的兴起带动了一股全民创作的热潮。无论是城市街头还是乡间小径&#xff0c;人们纷纷拿起手机&#xff0c;记录生活中的点点滴滴。领夹式麦克风凭借其精准的拾音特性和稳定的信号传输&#xff0c;无论是在静止状态还是在移动过程中&a…

制作一个静态库

1. 准备工作 # 目录结构 add.c div.c mult.c sub.c -> 算法的源文件, 函数声明在头文件 head.h # main.c中是对接口的测试程序, 制作库的时候不需要将 main.c 算进去 . ├── add.c ├── div.c ├── include │ └── head.h ├── main.c ├── mult.c └── s…

idea Git操作

1、代码拉取&#xff08;左上角&#xff09; 或 2、代码push&#xff08;左上角&#xff09; 3、切换分支&#xff08;右下角&#xff09; 4、分支管理 5、当前分支和某一个分支对比差异 6、当前分支某一个提交需要恢复成提交前状态&#xff08;revert&#xff09; 7、其他分…

基于Hadoop平台的电信客服数据的处理与分析④项目实现:任务15:数据生产

任务描述 电信数据生产是一个完整且严密的体系&#xff0c;这样可以保证数据的鲁棒性。在本项目的数据生产模块中&#xff0c;我们来模拟生产一些电信数据。同时&#xff0c;我们必须清楚电信数据的格式和数据结构&#xff0c;这样才能在后续的数据产生、存储、分析和展示环节…

泛微开发修炼之旅--30 linux-Ecology服务器运维脚本

文章链接&#xff1a;30 linux-ecology服务器运维脚本

【初阶数据结构】深入解析循环队列:探索底层逻辑

&#x1f525;引言 本篇将介绍如何实现循环队列并实现过程需要注意的事项&#xff0c;虽然篇幅较小&#xff0c;但是其中逻辑还是值得引人思考的&#xff0c;循环队列可以采用数组或链表实现&#xff0c;这篇将采用数组实现循环队列 &#x1f308;个人主页&#xff1a;是店小二…

mdb转gdb实现过程介绍(2)三种方式实现GDB数据库的读、写,并将实现方式与ArcGIS环境共存配置

一、内容提示 通过解析mdb地理数据库&#xff0c;获取了图层之间的组织结构、空间参考、表字段属性等信息。 下一步&#xff0c;就是将数据输出到GDB中。 下面详细介绍python3.9版本&#xff0c;读写GDB数据的方法&#xff1a; &#xff08;1&#xff09;使用ArcPy创建GDB、读写…

如何在恶意软件攻击后恢复已删除的照片

您是否尝试访问 PC 上的照片&#xff0c;但无法打开或丢失&#xff1f;您的 PC 可能正面临恶意软件攻击。 通常&#xff0c;当恶意软件进入系统时&#xff0c;它会与硬盘上的文件交互并破坏或感染它们。您的 PC 的防火墙和防病毒程序通常足以从 PC 中删除这些恶意文件。然而&a…

Flutter CTO 2024 报告出炉解读,看看有没有你关心的问题

Flutter CTO 2024 是由 LeanCode 主导进行的一次技术调查报告&#xff0c;本次报告数据来自 70 多个国家的 300 名 CTO、CIO 和技术主管&#xff0c;报告包含了 52 个问题、 7 次人物面对面访谈和 10 多位合作伙伴的协助 。 报告里 85% 的受访者拥有超过 5 年的⼯作经验&#…

LineageOs-21.0系统编译问题

&#x1f3c6;本文收录于「Bug调优」专栏&#xff0c;主要记录项目实战过程中的Bug之前因后果及提供真实有效的解决方案&#xff0c;希望能够助你一臂之力&#xff0c;帮你早日登顶实现财富自由&#x1f680;&#xff1b;同时&#xff0c;欢迎大家关注&&收藏&&…

机器学习:预测评估8类指标

机器学习&#xff1a;8类预测评估指标 R方值、平均值绝对误差值MAE、均方误差MSE、均方误差根EMSE、中位数绝对误差MAD、平均绝对百分误差MAPE、可解释方差分EVS、均方根对数误差MLSE。 一、R方值 1、说明&#xff1a; R方值&#xff0c;也称为确定系数或拟合优度&#xff…

多语言模型(Multilingual Models)用于推理(Inference)

在深入探讨多语言模型&#xff08;Multilingual Models&#xff09;用于推理&#xff08;Inference&#xff09;的详细内容时&#xff0c;我们需要首先理解多语言模型的基本概念、它们如何工作、为什么它们在现代自然语言处理&#xff08;NLP&#xff09;中变得如此重要&#x…

excel PivotTable 透视表

开发数据导出excel功能&#xff0c;设置导出透视表 数据源&#xff1a; 透视表&#xff1a; 使用插件EPPlus 数据源&#xff1a; IF OBJECT_ID(tempdb..#temptable) IS NOT NULLDROP TABLE #temptable; CREATE TABLE #temptable ( [PROJECT] varchar(50), [PRODUCT_CODE] var…

springboot双学位招生管理系统-计算机毕业设计源码93054

摘 要 科技进步的飞速发展引起人们日常生活的巨大变化&#xff0c;电子信息技术的飞速发展使得电子信息技术的各个领域的应用水平得到普及和应用。信息时代的到来已成为不可阻挡的时尚潮流&#xff0c;人类发展的历史正进入一个新时代。在现实运用中&#xff0c;应用软件的工作…

ruoyi-cloud登录接口实现滑块验证码

一、前言 ruoyi项目默认的验证码是这样的 今天来尝试增加滑块验证码&#xff0c;我们用到的是tianai-captcha。 文档地址&#xff1a;http://doc.captcha.tianai.cloud/ 源码地址&#xff1a;https://gitee.com/tianai/tianai-captcha 下面来看具体的步骤。 二、后端 在g…

从游戏到营销:抽卡机小程序的多维度应用探索

在数字化时代&#xff0c;小程序作为一种轻量级、即用即走的应用形态&#xff0c;正逐步渗透到人们生活的方方面面。其中&#xff0c;抽卡机小程序以其独特的趣味性和互动性&#xff0c;不仅在游戏领域大放异彩&#xff0c;更在营销领域展现出广阔的应用前景。本文将从游戏起源…

ELFK简介

&#x1f468;‍&#x1f393;博主简介 &#x1f3c5;CSDN博客专家   &#x1f3c5;云计算领域优质创作者   &#x1f3c5;华为云开发者社区专家博主   &#x1f3c5;阿里云开发者社区专家博主 &#x1f48a;交流社区&#xff1a;运维交流社区 欢迎大家的加入&#xff01…

Hadoop-11-MapReduce JOIN 操作的Java实现 Driver Mapper Reducer具体实现逻辑 模拟SQL进行联表操作

章节内容 上一节我们完成了&#xff1a; MapReduce的介绍Hadoop序列化介绍Mapper编写规范Reducer编写规范Driver编写规范WordCount功能开发WordCount本地测试 背景介绍 这里是三台公网云服务器&#xff0c;每台 2C4G&#xff0c;搭建一个Hadoop的学习环境&#xff0c;供我学…

文件扫描pdf怎么弄?5个简易高效的文件扫描方法

在繁忙的工作中&#xff0c;我们常常需要将纸质文件快速转换为电子文档&#xff0c;以便于编辑、存储或分享。 无论是合同、报告还是笔记&#xff0c;将这些纸质文件转换为Word格式&#xff0c;不仅能提高工作效率&#xff0c;还能确保信息的安全备份。然而&#xff0c;面对市…