数据库
首页 > 数据库> > MySQL创建临时表时包含哪些数据?

MySQL创建临时表时包含哪些数据?

作者:互联网

每当MySQL生成临时表时,我一直在阅读有关VARCHAR字段被转换为CHAR字段的信息.

如果我有下表…

>超过100K行
>十几个VARCHAR列设置为实际长度(例如,10个电话号码)
> 5个VARCHAR列设置为15K(长度可以短至20但最高可达15K)

而且,假设我有这个问题……

>返回多个列,包括VARCHAR
>加入了其他六个表(不在VARCHAR列上)
>按日期和数字ID对行进行排序(即,不在VARCHAR列上)
>具有不包含VARCHAR字段的WHERE子句
>限制为12行

当MySQL创建一个临时表时,为了排序和偶尔分组(在某些情况下),最终会在临时表中出现什么?

例如,表中是否只包含选择要返回哪些行所必需的列(即WHERE和ORDER BY子句中指定的那些),然后是数据库引擎确定LIMIT中的12行,然后仅读取数据那12行?或者,临时表中是否包含更大的数据块(例如,所有可能的行包括冗长的VARCHAR列)?

解决方法:

如果临时表适合memory restrictions,则使用HEAP (Memory engine)创建.所有限制均适用.如果它变得太大,服务器会将其转换为磁盘上的MyISAM临时表.

标签:mysql,select,varchar,temp-tables
来源: https://codeday.me/bug/20190709/1417520.html