0

我有这个查询

select counterparty_id, max(id) max_id from client_administrations where counterparty_type = 1 and effective_on <= '2013-10-22' group by counterparty_id

当我解释这个查询时,它给了我

** * ** * ** * ** * * 1. row * ** * ** * ** * ** *
id: 1
select_type: SIMPLE
table: client_administrations
type: index
possible_keys: NULL
key: cec
key_len: 11
参考:NULL
行:234969
额外:使用 where;使用集合中的索引
1 行(0.00 秒)

此查询返回 2,34,630 行,运行时间为 0.18 秒。但问题是这个查询在给定的功能中被多次使用,数据库中的行甚至可能高达 100 万。这是我的担忧。我尝试对此进行分析

mysql> 显示查询 1 的配置文件;
+----------+----------+
| 状态 | 持续时间 |
+----------+----------+
| 出发| 0.000126 |
| 检查权限 | 0.000018 |
| 开桌 | 0.000032 |
| 系统锁 | 0.000016 |
| 初始化 | 0.000051 |
| 优化 | 0.000029 |
| 统计 | 0.000145 |
| 准备| 0.000047 |
| 执行 | 0.000010 |
| 排序结果 | 0.000009 |
| 发送数据 | 0.117429 |
| 结束 | 0.000024 |
| 查询结束 | 0.000007 |
| 关闭表| 0.000012 |
| 释放物品 | 0.000016 |
| 记录慢查询 | 0.000004 |
| 清理| 0.000005 |
+----------+----------+

这表明发送数据需要最长时间。我的本地主机中的 RAM 大小为 3GG,而服务器中的 RAM 大小为 32 GB。即使这对查询执行所需的时间也没有任何影响。它不仅针对此查询,而且在我的数据库中有几个查询,尽管在解释的“额外”列中有索引,但发送分析数据所花费的最大时间。我确实更改了一些全局变量。这是我的全局变量的默认设置

mysql> 显示变量,如“%cache%”;
+-----------------------------+------------------ ----+
| 变量名 | 价值 |
+-----------------------------+------------------ ----+
| binlog_cache_size | 32768 |
| binlog_stmt_cache_size | 32768 |
| 有查询缓存 | 是 |
| key_cache_age_threshold | 300 |
| key_cache_block_size | 1024 |
| key_cache_division_limit | 100 |
| max_binlog_cache_size | 18446744073709547520 |
| max_binlog_stmt_cache_size | 18446744073709547520 |
| metadata_locks_cache_size | 1024 |
| 查询缓存限制 | 1048576 |
| query_cache_min_res_unit | 4096 |
| 查询缓存大小 | 16777216 |
| 查询缓存类型 | 开 |
| query_cache_wlock_invalidate | 关闭 |
| 存储程序缓存 | 256 |
| 表定义缓存 | 400 |
| table_open_cache | 400 |
| 线程缓存大小 | 8 |
+-----------------------------+------------------ ----+

可以做些什么来帮助这个“发送数据”部分。任何帮助将不胜感激

4

0 回答 0