我一直在阅读有关每当MySQL生成一个临时表时将转换为CHAR字段的VARCHAR字段的信息。当MySQL创建临时表时,包含哪些数据?
如果我有以下表...
- 的100K行
- 十几VARCHAR列设置为实际长度(例如,10为电话号码)
- 5个VARCHAR列设置为过剩15K(带长度,可以短至20,但高达15K最坏情况)
而且,让我们说我有这个疑问...
- 返回多列,包括VARCHAR处理
- JOIN'd有半打其他表(VARCHAR列上不)
- 对行排序按日期和数字ID(即不上 VARCHAR列)
- 有不不包括VARCHAR领域
- 有12行
当MySQL创建一个临时表时,为了排序和偶尔分组(在某些情况下),临时表中的结果是什么?
例如,该表只包含选择要返回哪些行(即那些在WHERE和ORDER BY子句中指定的行)所需的列,然后是数据库引擎确定LIMIT中的12行,然后阅读只有这12行的数据?或者,包含在临时表中的数据块是否更大(例如,包括冗长VARCHAR列的所有潜在行)?
你生成这个声明的临时表? CREATE TEMPORARY TABLE temp_table(count int);' – Matteo
@Matteo:不,我没有明确地创建临时表。据我了解(或误解)它,每当我的查询排序或组时,隐式创建一个临时表。 –