mysql 查看表是否存在_MySQL优化篇二

单表优化

最佳左前缀原则为,保持索引的定义和使用顺序的一致性

将含In的范围查询,放到where条件语句的最后。

索引需要逐步优化

两表优化

小表驱动大表

避免索引失效的一些原则:

复合索引,不要跨列或无序使用(最佳左前缀)

复合索引,尽量使用全索引匹配。就是尽量避免复合索引有三列,而只用到两列。

复合索引不能使用范围查询(!= <>)或is null (is not null),否则自身及右侧索引全部失效。

不要对索引进行操作(计算,函数,类型转换),否则索引失效。

select .. where A.x*3 = ...
-- A.x列存在索引,索引失效

==注意:SQL优化,是一种概率层次的优化,原因是服务层中有SQL优化器,可能会影响我们的优化,出现与我们预期不符的情况。==

尽量不要使用or,会使左右两边索引全部失效。

其他的优化方法

exist 和 in :如果主查询的数据极大,则使用in,如果子查询的数据大,则使用exist。

order by :选择使用单路还是双路;调整buffer容量的大小;避免使用select *...;复合索引不要跨列使用。

SQL慢查询日志:

MySQL提供的一种日志记录,用于记录MySQL中响应超过阈值的SQL语句(默认是10秒),慢查询日志默认是关闭的,建议:开发时打开,最终部署时关闭。

  • 查看慢查询日志是否开启

sql show variables like '%slow_query_log%';

  • 临时开启慢查询日志(在内存中开启),将服务重启后关闭。

set global slow_query_log = 1;

  • 永久开启慢查询日志,修改MySQL配置文件

ini [mysqld] ... + slow_query_log = 1 + slow_query_log_file = 日志存放地址

  • 查看慢查询阈值并修改

```sql -- 查看慢查询阈值时间 show variables like '%long_query_log%'

-- 修改阈值(临时修改),重新登录MySQL后生效(不需要重启服务) set global long_query_time = 5

--修改阈值(永久修改),修改MySQL配置文件,重启服务生效 [mysqld] ... + long_query_time = 5 ```

  • 查询超过阈值的SQL

sql show global status like '%slow_queries%' -- 当然这种方法只能查看超过阈值的SQL条数,具体的SQL语句还是要通过查看上面设置的慢查询日志来确定

  • 使用mysqldumpslow工具来查询慢SQL

​ 通过查看日志的方式虽然可行,但是当我们的SQL语句多了之后,慢SQL语句也随之变多,这样一来查看慢sql日志就成了一件费时费力的事,且日志内容较多,容易造成混乱。使用mysqldumpslow工具可以主动的过滤出我们希望查看的慢SQL语句,比如可以对吗慢SQL语句进行排序,进行正则匹配,只取10条数据等等。

PROFILES分析海量数据

-- 查看profiles是否开启
show variables like '%profiling%';

查看SQL语句执行的Query_id以及持续时间

show profiles;

​ 注意: show profiles可以看到profiling打开之后的SQL语句,会显示ID,持续时间,以及SQL语句,但是我们无法精准的看到各个硬件消费的时间。

查看SQL语句执行的具体硬件消费情况

-- 查看全部信息
show profile all for query  Query_id;-- 查看部分信息
show profile cpu, block io for query  Query_id;

全局查询日志

全局查看日志会记录开启之后的全部SQL语句,因此比较耗费性能。所以我们仅在调优、开发时使用。而且全局查询日志信息较少,所以使用较少。

使用方法

-- 查看是否开启
show variables like '%general_log%';-- 开启全局查询日志
SET GLOBAL general_log = 1;
SET GLOBAL log_output='table';  -- 表明我们将SQL存在表里。mysql.general_log表。SET GLOBAL log_output='file'; 
SET GLOBAL general_log_file='目录/general.log';  -- 表明将SQL存储在文件里
SET GLOBAL general_log = 1; -- 如果无效就需要再开启一下

锁机制

MyISAM只支持表锁,InnoDB支持表锁和行锁

-- 加锁
lock table 表1 read/write, 表1 read/write...;
-- 释放锁
unlock tables;-- 查看表加锁情况
show open tables;

读锁(共享锁)

会话1 对 A 表加 读 锁

  • 会话1:可以读取A表数据,但不能修改。不可以读写其它表数据。
  • 其它会话:可以读取A表数据,如果修改的话必须要等会话1将读锁释放。可以读写其它表数据。

| | 会话1 | 其他会话 | | ------ | ---------------- | --------------------------------------- | | A表 | 可以读,不可以写 | 可以读取,想要更新必须等待会话1释放表锁 | | 其他表 | 不可以读写 | 可以读写 |

写锁(互斥锁)

会话1 对 A 表加 写 锁

  • 会话1:可以对A表进行增删改查,但是不能操作其他表。
  • 其他会话:想要读写A表,必须等会话1释放写锁,可以正常操作其他表。

关闭自动提交

-- 以下三种方式都可以
set autocommit=0;
start transaction;
begin;

主从复制

集群和分布式:用板砖来比喻,一开始一个人负责搬砖和运砖,后来工头嫌他慢,又找了几个人帮他一起搬砖运砖,这叫集群(多个服务器支持一个项目)。后来工头还不满足,就让一群人专门负责搬砖,另一群人专门负责运砖,这叫分布式(一个项目划分为几个部分)。

主从复制大概过程

1aaea97814367432f52ad375ec1e2a03.png

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

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

相关文章

centos下mysql 命令_CentOS下mysql数据库常用命令总结

### 1.更改root密码mysqladmin -uroot password yourpassword### 2.远程登陆mysql服务器mysql -uroot -p -h192.168.137.10 -P3306### 3.查询数据库show databases;### 4.进入某个数据库use databasename;### 5.列出数据库中的表show tables;### 6.查看某个表全部字段desc slow…

java http请求_如何设置Fiddler来拦截Java代码发送HTTP请求,进行各种问题排查

我们使用Java的RestTemplate或者Apache的HTTPClient编程的时候&#xff0c;经常遇到需要跟踪Java代码发送的HTTP请求明细的情况。和javascript代码在浏览器里发送请求可以通过Chrome开发者工具方便地跟踪一样&#xff0c;对于Java代码发送的网络请求&#xff0c;我们也可以使用…

mysql自增id用完了_MySQL 自增 ID 用完了怎么办?

MySQL 自增 ID 用完了怎么办&#xff1f;在MySQL中有很多类型的自增ID&#xff0c;每个自增ID都设置了初始值&#xff0c;然后按照一定的步长增加&#xff0c;只要定义了字节长度&#xff0c;那么就会有上限&#xff0c;如果达到上限再次添加&#xff0c;则会报主键冲突错误&am…

第十篇学会编写python代码_Python之路,第十篇:Python入门与基础10

python3 函数函数(function)什么是函数&#xff1a;函数是可以重复执行的代码块&#xff0c;可以重复使用&#xff1b;作用&#xff1a; 定义用户级的函数&#xff1b;实现了一个代码块的封装&#xff1b;语法&#xff1a;def 函数名(参数列表)&#xff1a;语句块(代码块)...…

python报错怎么看_python中的错误如何查看

python常见的错误有1.NameError变量名错误2.IndentationError代码缩进错误3.AttributeError对象属性错误4.TypeError类型错误5.IOError输入输出错误6.KeyError字典键值错误具体介绍1.NameError变量名错误报错&#xff1a;>>> print aTraceback (most recent call last…

http通道连接mysql_通过http tunnel连接mysql

在/etc/nginx/nginx.conf的第一行加上load_module /usr/lib64/nginx/modules/ngx_http_proxy_connect_module.so;nginx -s reload> nginx: [emerg] dlopen() "/usr/lib64/nginx/modules/ngx_http_proxy_connect_module.so" failed (/usr/lib64/nginx/modules/ngx_…

山洪沟防洪治理工程技术规范_幸福沟水库一期工程完工丨尚志城市供水、防洪、农业灌溉皆升级...

日前&#xff0c;尚志市幸福沟水库一期工程建设完成&#xff0c;已蓄水试运行。幸福沟水库工程是列入黑龙江省“十三五”规划的重点水利项目&#xff0c;是哈市重点推进的两座中型水库之一&#xff0c;也是尚志市一项打基础、利长远、惠民生的重大战略民生工程。幸福沟水库位于…

子类怎么继承父类方法中的变量_JavaOOP_04 封装 继承

一、封装概念&#xff1a;隐藏程序内部的具体实现细节&#xff0c;对外提供接口&#xff0c;从而提高程序的安全性。高内聚&#xff0c;低耦合。使用封装的步骤&#xff1a;1、属性私有化&#xff0c;使用private访问修饰符进行修饰2、对外提供 setter/getter 方法 setter设置值…

mySQL字符串字段区别_MySQL类型之(字符串列类型区分、数据类型区分)

1.首先CHAR, VARCHAR, TEXT和BINARY, VARBINARY, BLOB的区别&#xff1a;CHAR, VARCHAR, TEXT称为&#xff1a; 非二进制字符串;BINARY, VARBINARY, BLOB称为&#xff1a;二进制字符串;非二进制字符串和二进制字符串的区别是&#xff1a;非二进制字符串包含的是字符字符串…

mysql 社区版密码如何修改_如何用优雅的方法修改MySQL root密码

搭噶好&#xff0c;我系小编&#xff0c;我好久没发文章了啊&#xff0c;今天发文章的原因是&#xff0c;我竟然忘了我的MySQL root密码。。本来想找RAKsmart客服直接重置啥的&#xff0c;后来想想还是自己搞吧&#xff0c;还能长知识。然后&#xff0c;我发现一个事情&#xf…

python全局变量赋值_Python全局变量和局部变量

python中&#xff0c;对于变量作用域的规定有些不一样。在诸如C/C、java等编程语言中&#xff0c;默认在函数的内部是能够直接訪问在函数外定义的全局变量的&#xff0c;可是这一点在python中就会有问题。以下是一个样例。test.py:#!/usr/bin/pythonCOUNT1def func():COUNT CO…

mysql dos入门_在dos上操作mysql的基本?

2安装:A,双击运行“mysql-5.5.27-win32.msi”B,MySQL安装向导启动C,按“Next”继续3配置&#xff1a;MySQL是现在流行的关系数据库中其中的一种&#xff0c;相比其它的数据库管理系统(DBMS)来说&#xff0c;MySQL具有小巧、功能齐全、查询迅捷等优点。MySQL 主要目标是快速、健…

python读取api接口频率_Python基础(API接口测试)

importflask,json,pymysqlfrom flask importrequest, jsonify, Responsefrom datetime importdatetimefrom flask_cors importCORSdbpymysql.Connect(hostlocalhost,port3306,userroot,passwd24576946,dbschool,)cursordb.cursor()server flask.Flask(__name__)#允许跨域访问CO…

mysql初始化脚本建表_mysql新建表修改表sql脚本

新建表语句&#xff1a;-- ------------------------------------------------- 全量脚本-- ------------------------------------------------- 创建表 compet_info(大赛信息)的当前表SELECT Create Table compet_info-大赛信息...;DROP TABLE IF EXISTS compet_info;CREATE …

中countif函数_Count系列函数-Count、Counta、Countblank、Countif、Countifs

统计函数在我们的日常工作中也会经常使用。常见的有Count、Counta、Countblank、Countif、Countifs五个。Count用于统计数据类型的单元格个数&#xff0c;Counta用于统计非空单元格的个数&#xff0c;Countblank用于统计空单元格的个数&#xff0c;而Countif、Countifs用于条件…

labview实例_手把手以实例教你学LabVIEW编程,条件结构编程方法

LabVIEW又称为G语言&#xff0c;简单易学、形象直观&#xff0c;采用图形化的编程方式&#xff0c;是专为测试、测量和控制应用而设计的系统工程软件。在上篇文章(请参考&#xff1a;顺序结构编程)中已经讲了顺序结构的编程方法&#xff0c;下面通过具体例子演示条件结构的编程…

mysql数据变化通通知机制_深入理解Notification机制

先贴上这些源码里面相关的文件&#xff1a;framework/base/core/java/android/app/NotificationManager.javaframework/base/services/java/com/android/server/NotificationManagerService.java{hide} extends INotificationManager.Stubframework/base/services/java/com/and…

python与h5结合实例_使用h5py合并所有h5文件

您需要的是文件中所有数据集的列表。我认为这里需要的是recursive function的概念。这将允许您从一个组中提取所有的“数据集”&#xff0c;但是当其中一个看起来是组本身时&#xff0c;递归地执行相同的操作&#xff0c;直到找到所有数据集为止。例如&#xff1a;/|- dataset1…

vfp 调用 mysql uft-8 connstring_(最全的数据库连接字符串)connectionstring

PS:如果不是太稳定的数据库&#xff0c;最好使用connection lifetime10来限制连接池内连接的生存日期Standard Security:"Driver{SQL Server};ServerAron1;Databasepubs;Uidsa;Pwdasdasd;"Trusted connection:"Driver{SQL Server};ServerAron1;Databasepubs;Tru…

python3ide手机端怎么样_各大Python IDE的优缺点,看看哪种最适合你?

写 Python 代码最好的方式莫过于使用集成开发环境(IDE)了。它们不仅能使你的工作更加简单、更具逻辑性&#xff0c;还能够提升编程体验和效率。每个人都知道这一点。而问题在于&#xff0c;如何从众多选项中选择最好的 Python 开发环境。初级开发者往往面临这个问题。本文将概述…