> For the complete documentation index, see [llms.txt](https://bohans.gitbook.io/ji-chu/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://bohans.gitbook.io/ji-chu/mysql/sql-you-hua/cha-xun-you-hua/you-hua-sql-yu-ju-de-yi-ban-bu-zhou/1.-tong-guo-show-status-ming-ling-liao-jie-ge-zhong-sql-de-zhi-xing-pin-l.md).

# 1. 通过 show status 命令了解各种 SQL 的执行频率

MySQL 客户端连接成功后，通过 <mark style="color:blue;">**SHOW \[SESSION | GLOBAL] STATUS**</mark> 命令可以提供服务器状态信息，也可以在操作系统上使用 <mark style="color:blue;">**mysqladmin extended-status**</mark> 命令获得这些消息。

> <mark style="color:blue;">**SHOW STATUS**</mark> 可以根据需要加上参数 “<mark style="color:blue;">**SESSION**</mark>” 或者 “<mark style="color:blue;">**GLOBAL**</mark>” 来显示 session 级（当前连接）和 global 级（自数据库上次启动至今）的统计结果。
>
> 如果不写，**默认使用的参数是 “**<mark style="color:blue;">**SESSION**</mark>**”**。

{% code overflow="wrap" %}

```sql
SHOW STATUS WHERE Variable_name IN ("Com_select", "Com_insert", "Com_update", "Com_delete");
```

{% endcode %}

**Com\_xxx 表示每个 xxx 语句执行的次数**，通常比较关心的是以下几个统计参数：

* <mark style="color:blue;">**Com\_select**</mark>：执行 SELECT 操作的次数，一次查询只累加 1。
* <mark style="color:blue;">**Com\_insert**</mark>：执行 INSERT 操作的次数，对于批量插入的 INSERT 操作，只累加一次。
* <mark style="color:blue;">**Com\_update**</mark>：执行 UPDATE 操作的次数。
* <mark style="color:blue;">**Com\_delete**</mark>：执行 DELETE 操作的次数。

上面这些参数对于所有存储引擎的表操作都会进行累计。

```sql
SHOW STATUS WHERE Variable_name LIKE "Innodb_rows_%";
```

下面这几个参数只是针对 InnoDB 存储引擎的，累加的算法也略有不同：

* <mark style="color:blue;">**Innodb\_rows\_read**</mark>：SELECT 查询返回的行数。
* <mark style="color:blue;">**Innodb\_rows\_inserted**</mark>：执行 INSERT 操作插入的行数。
* <mark style="color:blue;">**Innodb\_rows\_updated**</mark>：执行 UPDATE 操作更新的行数。
* <mark style="color:blue;">**Innodb\_rows\_deleted**</mark>：执行 DELETE 操作删除的行数。

<mark style="color:orange;">**通过以上几个参数，可以很容易地了解当前数据库的应用是以插入更新为主还是以查询操作为主，以及各种类型的 SQL 大致的执行比例是多少。**</mark>对于更新操作的计数，是对执行次数的计数，不论提交还是回滚都会进行累加。

对于事务型的应用，通过 <mark style="color:blue;">**Com\_commit**</mark> 和 <mark style="color:blue;">**Com\_rollback**</mark> 可以了解事务提交和回滚的情况，对于回滚操作非常频繁的数据库，可能意味着应用编写存在问题。

此外，以下几个参数便于用户了解数据库的基本情况。

* <mark style="color:blue;">**Connections**</mark>：试图连接 MySQL 服务器的次数。
* <mark style="color:blue;">**Uptime**</mark>：服务器工作时间。
* <mark style="color:blue;">**Slow\_queries**</mark>：慢查询的次数。

{% code overflow="wrap" %}

```sql
SHOW STATUS WHERE Variable_name IN ("Com_commit", "Com_rollback", "Connections", "Uptime", "Slow_queries");
```

{% endcode %}
