Din*_*mar 5 performance varchar temporary-tables mysql-5.7
我正在 mysql 5.7 中试验 text 和 varchars。我创建了一个简单的 mysql 表,如下所示
创建表small_table
(pk
int(11) NOT NULL AUTO_INCRMENT,varc
varchar(255) DEFAULT NULL,txt
text, 首要的关键 (pk
) ) 引擎=InnoDB AUTO_INCRMENT=103925 默认字符集=utf8
该表大约有 100k 行。
我已经执行了以下查询并对两者进行了分析
查询 1(对 varchar 列进行分组)
通过varc从small_table组中选择varc,count(*);
配置文件 1 结果
+----------------------+----------+ | 状态 | 持续时间 | +----------------------+----------+ | 开始| 0.000064 | 0.000064 | 检查权限 | 0.000004 | | 开桌 | 0.004812 | | 初始化| 0.000026 | 0.000026 | 系统锁| 0.000005 | 0.000005 | 优化| 0.000006 | 0.000006 | 统计 | 0.000010 | 0.000010 | 准备| 0.000006 | 0.000006 | 创建临时表 | 0.000021 | 0.000021 | 排序结果 | 0.000003 | | 执行| 0.000001 | | 发送数据| 0.052795 | 0.052795 | 创建排序索引| 0.000049 | 0.000049 | 结束 | 0.000003 | | 查询结束 | 0.000006 | 0.000006 | 删除 tmp 表 | 0.000004 | | 查询结束 | 0.000002 | | 结束表| 0.000006 | 0.000006 | 释放物品| 0.000021 | 0.000021 | 清理 | 0.000018 | 0.000018 +----------------------+----------+
临时表详细信息 1
+------------------------+--------+ | 变量名 | 价值| +------------------------+--------+ | 创建_tmp_disk_tables | 0 | | 创建_tmp_表| 1 | +------------------------+--------+
查询 2(按文本列分组)
select txt,count(*) fromsmall_table group by txt;
剖面 2 结果
+----------------------+------------+ | 状态 | 持续时间 | +----------------------+------------+ | 开始| 0.000134 | 0.000134 | 检查权限 | 0.000010 | 0.000010 | 开桌 | 0.006690 | | 初始化| 0.000034 | 0.000034 | 系统锁| 0.000007 | 0.000007 | 优化| 0.000004 | | 统计 | 0.000017 | 0.000017 | 准备| 0.000008 | | 创建临时表 | 0.000027 | 0.000027 | 排序结果 | 0.000005 | 0.000005 | 执行| 0.000002 | | 发送数据| 26.359877 | | 创建排序索引| 0.001042 | 0.001042 | 结束 | 0.000007 | 0.000007 | 查询结束 | 0.000007 | 0.000007 | 删除 tmp 表 | 0.000208 | | 查询结束 | 0.000003 | | 结束表| 0.000007 | 0.000007 | 释放物品 | 0.000028 | 0.000028 | 清理| 0.000020 | +----------------------+------------+
临时表详细信息 2
+------------------------+--------+ | 变量名 | 价值| +------------------------+--------+ | 创建_tmp_disk_tables | 1 | | 创建_tmp_表| 1 | +------------------------+--------+
除了“发送数据阶段”之外,两个配置文件在每个阶段花费的时间几乎相同。第一个花了 0.052795 秒,第二个花了 26.359877 秒。为什么那个阶段差别这么大?(没有 group by 子句的相同查询在“发送数据阶段”中没有显示任何差异)