MySQL中数据库优化的常见sql语句有哪些

1.SHOW ENGINES

查看执行引擎以及默认引擎。

MySQL中数据库优化的常见sql语句有哪些

2.SHOW PROCESSLIST

SHOW PROCESSLIST查看当前数据库连接的使用情况,以及各种状态信息,非常有用。SHOW PROCESSLIST; 只列出前100条,如果想全列出请使用SHOW FULL PROCESSLIST;

MySQL中数据库优化的常见sql语句有哪些

属性列以及含义:

id 一个标识,要kill 一个语句的时候很有用。
user 显示当前用户,如果不是root,这个命令就只显示你权限范围内的sql语句。
host 显示这个语句是从哪个ip 的哪个端口上发出的。可用来追踪出问题语句的用户。
db 显示这个进程目前连接的是哪个数据库。
command 显示当前连接的执行的命令,一般就是休眠(sleep),查询(query),连接(connect)。

state列以及含义,mysql列出的状态:

Checking table 正在检查数据表(这是自动的)。
Closing tables 正在将表中修改的数据刷新到磁盘中,同时正在关闭已经用完的表。这是一个很快的操作,如果不是这样的话,就应该确认磁盘空间是否已经满了或者磁盘是否正处于重负中。
Connect Out 复制从服务器正在连接主服务器。
Copying to tmp table on disk 由于临时结果集大于tmp_table_size(默认16M),正在将临时表从内存存储转为磁盘存储以此节省内存。
Creating tmp table 正在创建临时表以存放部分查询结果。
deleting from main table 服务器正在执行多表删除中的名列前茅部分,刚删除名列前茅个表。

3.SHOW STATUS LIKE ‘InnoDB_row_lock%’

InnoDB 的行级锁定状态变量。

MySQL中数据库优化的常见sql语句有哪些

InnoDB 的行级锁定状态变量不仅记录了锁定等待次数,还记录了锁定总时长,每次平均时长,以及最大时长,此外还有一个非累积状态量显示了当前正在等待锁定的等待数量。对各个状态量的说明如下:

  • InnoDB_row_lock_current_waits:当前正在等待锁定的数量;

  • InnoDB_row_lock_time:从系统启动到现在锁定总时间长度;

  • InnoDB_row_lock_time_avg:每次等待所花平均时间;

  • InnoDB_row_lock_time_max:从系统启动到现在等待最常的一次所花的时间;

  • InnoDB_row_lock_waits:系统启动后到现在总共等待的次数;

对于这5个状态变量,比较重要的主要是InnoDB_row_lock_time_avg(等待平均时长),InnoDB_row_lock_waits(等待总次数)以及InnoDB_row_lock_time(等待总时长)这三项。尤其是当等待次数很高,而且每次等待时长也不小的时候,我们就需要分析系统中为什么会有如此多的等待,然后根据分析结果着手指定优化计划。

如果发现锁争用比较严重,如InnoDB_row_lock_waits和InnoDB_row_lock_time_avg的值比较高,还可以通过设置InnoDB Monitors 来进一步观察发生锁冲突的表、数据行等,并分析锁争用的原因。

4.SHOW ENGINE INNODB STATUS

SHOW ENGINE INNODB STATUS命令会输出当前InnoDB监视器监视到的很多信息,它输出就是一个单独的字符串,没有行和列,内容分为很多小段,每一段对应innodb存储引擎不同部分的信息,其中有一些信息对于innodb开发者来说非常有用。

有一节LATEST DETECTED DEADLOCK,就是记录的最后一次死锁信息, 如下案例:

MySQL中数据库优化的常见sql语句有哪些

  • “(1) TRANSACTION”显示名列前茅个事务的信息;

  • “(1) WAITING FOR THIS LOCK TO BE GRANTED”显示名列前茅个事务等待的锁信息

  • “(2) TRANSACTION”显示第二个事务的信息;

  • “(2) HOLDS THE LOCK(S)” 显示的是第二个事务持有的锁信息;

  • “(2) WAITING FOR THIS LOCK TO BE GRANTED” 显示第二个事务等待的锁信息

  • 最后一行表示处理结果,比如“WE ROLL BACK TRANSACTION (2),表示回滚了第二个事务。

5.SHOW INDEXS

SHOW INDEXS查询一个表中的索引信息:SHOW INDEXES FROM table_name;

建表的sql如下:

CREATE TABLE contacts(    contact_id INT AUTO_INCREMENT,    first_name VARCHAR(100) NOT NULL comment 'first name',    last_name VARCHAR(100) NOT NULL,    email VARCHAR(100),    phone VARCHAR(20),    PRIMARY KEY(contact_id),    UNIQUE(email),    INDEX phone(phone) ,    INDEX names(first_name, last_name) comment 'By first name and/or last name');

存储过程插入五万条数据:

CREATE PROCEDURE zqtest ( ) BEGIN	DECLARE		i INT DEFAULT 0;	DECLARE		j VARCHAR ( 100 ) DEFAULT 'first_name';	DECLARE		k VARCHAR ( 100 ) DEFAULT 'last_name';	DECLARE		l VARCHAR ( 100 ) DEFAULT 'email';	DECLARE		m VARCHAR ( 20 ) DEFAULT '11111111111';		SET i = 0;	START TRANSACTION;	WHILE			i < 50000 DO		IF			MOD ( i, 100 ) = 0 THEN								SET j = CONCAT( 'first_name', i );					END IF;		IF			MOD ( i, 200 ) = 0 THEN								SET k = CONCAT( 'last_name', i );					END IF;		IF			MOD ( i, 50 ) = 0 THEN								SET m = CONCAT( '', CAST( m as UNSIGNED) + i );					END IF;		INSERT INTO contacts ( first_name, last_name, email, phone )		VALUES			( j, k, CONCAT(l,i), m );				SET i = i + 1;			END WHILE;	COMMIT;	END;

使用show index from contacts;后结果如下:

MySQL中数据库优化的常见sql语句有哪些

字段说明:

Table 表名
Non_unique 少数索引为0,其他索引为1。主键索引也是少数索引。
Key_name 索引名。如果名字相同则表明是同一个索引,并且是联合索引,每一行都表示联合索引中的某一个列。
Seq_in_index 索引中的列序列号,从1开始。也可以表明该列在联合索引中的顺序。
Column_name 索引列名,如果是联合索引则是某一个列的名字
Collation 列以什么方式存储在索引中,大概意思就是字符序。
Cardinality 一个索引上不同的值的个数,我们称之为“基数”(cardinality),也称为区分度,这个基数越大,索引的区分度越好。该值的统计不一定是准确的,可以使用ANALYZE TABLE修正。
Sub_part 前缀索引。如果列只是被部分地编入索引,则为被编入索引的字符的数目。如果整列的值都被编入索引,则为NULL。
Packed 关键字如何被压缩。如果没有被压缩,则为NULL。压缩一般包括压缩传输协议、压缩列解决方案和压缩表解决方案。
Null 如果列值可以包含null,则为YES
Index_type 索引结构类型,常见有FULLTEXT,HASH,BTREE,RTREE
Comment、Index_comment 注释

6.ALTER TABLE xx ENGINE = INNODB

重建表,包括索引结构。可以消除索引页分裂以及删除数据时留下的磁盘碎片。

7.ANALYZE TABLE

不是重建表,只是对表的索引信息做重新统计,没有修改数据,这个过程中加了MDL读锁。可以用来修正show index from tablename;中统计索引的Cardinality是数据异常的情况。

到此,关于“MySQL中数据库优化的常见sql语句有哪些”的学习就结束了,希望能够解决大家的疑惑。理论与实践的搭配能更好的帮助大家学习,快去试试吧!若想继续学习更多相关知识,请继续关注亿速云网站,小编会继续努力为大家带来更多实用的文章!

文章标题:MySQL中数据库优化的常见sql语句有哪些,发布者:亿速云,转载请注明出处:https://worktile.com/kb/p/22374

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
亿速云的头像亿速云认证作者
上一篇 2022年9月1日 下午11:26
下一篇 2022年9月2日 下午4:40

相关推荐

  • col在html中指的是什么

    col在html中是“列”的意思;col是html中的标签,是“column”的缩写,该标签是给表格中一个或者多个列应用样式,而不需要重复为每个单元格或每一行设置样式,标签规定了元素内部每一列的属性,只能在table或colgroup元素中使用该标签。 本教程操作环境:windows10系统、HTM…

    2022年9月2日
    75600
  • css如何实现平行四边形

    平行四边形 #parallelogram { width: 150px; height: 100px; transform: skew(20deg); background: red;} 以上是“css如何实现平行四边形”这篇文章的所有内容,感谢各位的阅读!相信大家都有了一定的了解,希望分享的内容对…

    2022年8月31日
    40200
  • temp文件夹全删光应该怎么做

    temp文件夹能全部删光;temp文件是系统中的临时文件夹,用于收藏浏览网页的临时文件、编辑文件等等,文件中的内容都可以删除,有些删不掉是因为有的程序正在使用,可以把后台的所有程序都关掉,即可删除文件夹中的指定内容了。 temp文件夹能不能全删光 能全删光。 temp(临时文件夹temporary)…

    2022年9月13日
    6.6K00
  • 怎么使用CSS混合模式让文字智能适配背景颜色

    页面上有一段文本,能否实现这段文本在不同背景色下展示不同的颜色?也就是俗称的智能变色。像是下面这样: 文本在黑色底色上表现为白色,在白色底色上表现为黑色。看似很复杂的一个效果,但是其实在 CSS 中非常好实现,今天就介绍这样一个小技巧,在 CSS 中,利用混合模式 mix-blend-mode: d…

    2022年9月8日
    53800
  • 如何利用WinRAR漏洞针对中东地区的定向攻击活动分析

    背景 2019年3月17日,360威胁情报中心截获了一例疑似“黄金鼠”APT组织(APT-C-27)利用WinRAR漏洞(CVE-2018-20250[6])针对中东地区的定向攻击样本。该恶意ACE压缩包内包含一个以恐怖袭击事件为诱饵的Office Word文档,诱使受害者解压文件,当受害者在本地计…

    2022年9月21日
    71500
  • windows xbox登录账号没反应如何解决

    xbox登录账号没反应解决方法: 方法一: 1、我们可以尝试先在电脑中登录微软账号,这样打开xbox就不需要登录了。 2、首先我们进入系统设置。 3、然后打开“账户” 4、在其中选择“改用Microsoft账户登录” 方法二: 1、首先我们以管理员身份运行“windows powershell” 2…

    2022年9月20日
    83400
  • 怎么使用linux命令备份文件夹

    linux命令能备份文件夹。有两种命令用于备份文件夹:1、cp命令,该命令用于复制文件或文件夹,语法为“cp [options] source dest”;2、dump命令,该命令用于备份文件系统,语法为“dump [-cnu][-0123456789]…”。 linux命令备份文件夹 …

    2022年6月29日
    3.4K00
  • 如何使用Masscan、Nmap、ELK做内网资产收集

    安装 安装masscan # yum install git gcc make libpcap-devel# git clone https://github.com/robertdavidgraham/masscan# cd masscan# make# cp bin/masscan /bin 安…

    2022年9月8日
    80900
  • MySQL半同步复制如何配置

    前言: MySQL默认的主从复制采用的是异步模式,主库提交事务不需要确认是否已经传送到从库端,在主库发生宕机主备切换时,可能导致主库已经提交的事务在从库丢失的情况。 在MySQL 5.7通过插件支持了半同步复制模式,半同步模式下,主库事务至少要确保一个从库接收到日志才能完成提交,因此,可以保证在主库…

    2022年9月16日
    73800
  • mysql的2002错误怎么解决

    在mysql中,2022错误指的是编译的时候没有指定socket,所以mysql命令连接的时候还是使用的默认值,因为socket位置变了,而mysql命令不知道,所以就出现了这样的错误,可以修改“/etc/my.cnf”文件来解决该错误。 本教程操作环境:windows10系统、mysql8.0.2…

    2022年9月1日
    1.3K00
注册PingCode 在线客服
站长微信
站长微信
电话联系

400-800-1024

工作日9:30-21:00在线

分享本页
返回顶部