依赖 <!-- https://mvnrepository.com/artifact/org.springframework.boot/spring-boot-starter-data-redis --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-redis</artifactId> <version>2.6.5</version> </dependency> <!-- https://mvnrepository.com/artifact/org.apache.commons/commons-pool2 --> <dependency> <groupId>org.apache.commons</groupId> <artifactId>commons-pool2</artifactId> </dependency> 配置redis的IP地址和端口号 redis: host: ip地址 port: 6379
原文:https://www.csdn.net/tags/MtjaQg3sMDA0NDAtYmxvZwO0O0OO0O0O.html
现在面试过程中,除了开发的基础,面试官通常还会问SQL优化的方面,SQL优化也能体现出来平时对数据库的理解和技术的高低。现在就总结了几个,希望对大家有帮助。
6.1.在表中建立索引,优先考虑where.group by使用到的字段。
6.2.查询条件中,一定不要使用select * ,因为会返回过多无用的字段会降低查询效率。应该使用具体的字段代替,只返回使用到的字段。
6.3.不要在where条件中使用左右两边都是%的like模糊查询,如:
SELECT * FROM t_order WHERE customer LIKE '%zhang%'
这样会导致数据库引擎放弃索引进行全表扫描。
优化:尽量在字段后面使用模糊查询。如下:
SELECT * FROM t_order WHERE customer LIKE 'zhang%'
6.4.尽量不要使用in 和not in,会造成全表扫描。如下:
SELECT * FROM t_order WHERE id IN (2,3)
SELECT * FROM t_order1 WHERE customer IN (SELECT customer FROM t_order2)
优化:
对于连续的数值,能用 between 就不要用 in ,如下:SELECT * FROM t_order WHERE id BETWEEN 2 AND 3
原文链接:https://blog.csdn.net/weixin_30995429/article/details/114798804
Mysql中 查询慢的 Sql语句的记录查找
慢查询日志 slow_query_log,是用来记录查询比较慢的sql语句,通过查询日志来查找哪条sql语句比较慢,这样可以对比较慢的sql可以进行优化。
1. 登陆我们的mysql数据库:
2. 查看一下当前的慢查询是否开启,以及慢查询所规定的时间:
show variables like 'slow_query_log';
show variableslike 'long_query_time';
3. 如果你的查询后的结果是OFF 状态的话,就需要通过相关设置将其修改为ON状态:
set global slow_query_log='ON';
4. 将慢查询追踪的时间设置为1s:
这里你在设置之后,这个世界是不会立即变成1s的,需要在数据库重启后才生效:
5. 设置慢查询日志文件保存的位置:
set global slow_query_log_file='/var/lib/mysql/test_1116.log';
6. 查看以下配置后的文件:
sudo subl /var/lib/mysql/test_1116.log
=============================================================================================================================
=============================================================================================================================
MySQL数据库慢查询问题排查方法
最近碰到了几次数据库响应变慢的问题,整理了一下处理的流程和分析思路,执行脚本。希望对其他人有帮助。
MySQL慢查询表现
明显感觉到大部分的应用功能都变慢,但也不是完全不能工作,等待比较长的时间还是有响应的。但是整个系统看起来就非常的卡。
查询慢查询数量
一般来说一个正常运行的MySQL服务器,每分钟的慢查询在个位数是正常的,偶尔飙升到两位数也不是不能接受,接近100系统可能就有问题了,但是还能勉强用。这几次出问题慢查询的数量已经到了1000多。
慢查询的数量保存在mysql库里面的slow_log表。
SELECT * FROM `slow_log` where start_time > '2019/05/19 00:00:00';
这样就能查出一天以来的慢查询了。
查看当前进行的查询状态
大家应该都比较常用show processlist来查看当前系统中正在执行的查询,其实这些数据也保存在information_schema库里面的processlist表,因此如果要做条件查询,直接查询这张表更方便。
比如查看当前所有的process
select * from information_schema.processlist
查看当前正在进行的查询并按照已经执行时间倒排
使用SeleniumBasic启动浏览器以后,系统会多出Chrome浏览器的进程和相应的驱动文件这两个进程。
正常的做法是利用代码执行WebDriver.Quit方法关闭所有浏览器,并且退出Chromedriver驱动文件的进程。
但是很多情况下浏览器被手动或者其他行为关闭了,这样造成Chromedriver进程还残留在系统中。为了不影响下次使用Selenium,应该清理该进程。
方法一:在任务管理器中找到,然后结束任务 方法二:使用PowerShell的Stop-Process 执行 Stop-Process -Name chromedriver 按下回车后,该进程被清理的很干净。
方法三:利用WMI遍历进程 Sub TerminateProcess() Dim Service As Object, SOS As Object, SO As Object '后期绑定 Set Service = GetObject(winmgmts:\\.) Do Set SOS = Service.ExecQuery(Select * From Win32_Process Where Name='chromedriver.exe') If SOS.Count > 0 Then Set SO = SOS.ItemIndex(0) SO.Terminate Else Exit Do End If Loop End Sub 在VBA中输入上述过程,原理是遍历所有进程再根据进程名称过滤,然后终止每一个驱动文件对应的进程。
运行一下上述过程,进程被清理。
方法一 方法二 缺少推荐安装。 像390会导致启动不了图形界面。 470和510可以启动图形界面。
cannl同步mysql数据到es中 canal组件介绍 canal-admin(非必须但推荐使用):为canal提供整体配置管理、节点运维等面向运维的功能,提供相对友好的WebUI操作界面,方便更多用户快速和安全的操作。
canal-server:服务端,从mysql读取binlog日志获取增量日志,可以通过tcp、kafka、RocketMQ等方式与客户端通信;通过zookeeper搭建集群。
canal-adapter客户端,根据canal-server获取的增量日志执行适配到其他诸如elasticsearch、redis、mysql等端,实现数据同步。
本次实验环境
首先我们需要下载canal的各个组件canal-server、canal-adapter、canal-admin,下载地址:https://github.com/alibaba/canal/releases
es及相关工具的部署可参考Elasticsearch详解及部署
1、开启mysql的binlog 使用canal-server需要先准备mysql,对于自建 MySQL , 需要先开启 Binlog 写入功能,配置 binlog-format 为 ROW 模式
vi /etc/my.cnf
[mysqld] log-bin=mysql-bin # 开启 binlog binlog-format=ROW # 选择 ROW 模式 server_id=1 # 配置 MySQL replaction 需要定义,不要和 canal 的 slaveId 重复 配置完成后重启mysql,并查询是否配置生效:ON就是开启
systemctl restart mysqld
可以进入数据库再次查看下
mysql> show variables like 'log_bin'; +---------------+-------+ | Variable_name | Value | +---------------+-------+ | log_bin | ON | +---------------+-------+ 1 row in set (0.
屏蔽策略文件可以放在http, server, location, limit_except语句块中,我们可以根据需要合理的配置。 相关配置语句
屏蔽单个ip访问 # 格式: deny ip; deny 123.68.23.5; 允许单个ip访问 # 格式: allow ip; allow 123.68.25.6; 屏蔽所有ip访问 deny all; 允许所有ip访问 allow all; 屏蔽ip段访问 # deny ip/mask # 屏蔽172.12.62.0到172.45.62.255访问的命令 deny 172.12.62.0/24; 允许ip段访问 # allow ip/mask # 屏蔽172.102.0.0到172.102.255.255访问的命令 allow 172.102.0.0/16; 配置说明 新建一个配置文件,如blockip.conf。在其中编写相关的ip限制语句,然后在nginx.conf中加入如下配置: # 配置ip限制策略 include blockip.conf; nginx会根据配置文件中的语句,从上至下依次判断。因此,写在前面的语句可能会屏蔽后续的语句。
1、导航查询特点 作用:主要处理主对象里面有子对象这种层级关系查询
1.1 无外键开箱就用 其它ORM导航查询 需要 各种配置或者外键,而SqlSugar则开箱就用,无外键,只需配置特性和主键就能使用
1.2 高性能优 查询 性能非常强悍 支持大数据分页导航查询
3.3 语法超级爽 注意:多级查询时VS有时候没提示直接写就行了
var list=db.Queryable<Test>() .Includes(x => x.Provinces,x=>x.Citys ,x=>x.Street)//多级查询 有时候VS没提示手写 .Includes(x => x.ClassInfo)// 一级查询 .ToList(); var list=db.Queryable<Test>() //多级查询 加排序过滤 .Includes(x =>x.Provinces.Where(z=>z.Id>0).OrderBy(z=>z.Id).ToList(),x=>x.Citys,x=>x.Street) // 一级查询 .Includes(x =>x.ClassInfo) .ToList(); 2、新导航查询 适合有主键的常规操作, 请升级到5.0.6.8
2.1 一对一 //实体 public class StudentA { [SugarColumn(IsPrimaryKey = true)] public int StudentId { get; set; } public string Name { get; set; } public int SchoolId { get; set; } [Navigat(NavigatType.
启动MySQL服务
net start mysql 关闭MySQL服务
net stop mysql 查询
show variables like 'slow_query%';show variables like 'long_query_time'; 将 slow_query_log 全局变量设置为“ON”状态 ,临时生效,mysql重启后就会失效
set global slow_query_log='ON'; 设置慢查询日志存放的位置
set global slow_query_log_file='D:\\Data\\mysql.log';
原子性 隔离性 一致性 持久性
事务 mysql默认开启事务自动提交
事务流程 关闭自动提交
set autocommit=0
开启事务:start transaction
提交:commit (成功)
回滚:rollback (失败)
结束事务:autocommit=1 开启自动提交
索引 索引原则 索引不是越多越好
不要对进场变动的数加索引
小数据量的表不需要索引
索引一般加在常用来查询的字段上
数据库用户管理 MySQL备份 保证重要的数据不丢失
数据转移
方式:直接拷贝物理文件,在可视化工具中导出,命令行导出
导入导出 三大范式