我有一个具有这种结构的MySQL表
当我执行搜索或选择ID,UID,标签或所有这些3时,MySQL还会在内存中加载Text字段吗? [我没有在SQL中指定]
例 - >
SQL1-> Select ID,UID,Tags order by Tags
SQL2-> Select ID,UID,Tags where UID=1
SQL3-> Select ID,UID,Tags,Title where UID=1 and Tags=Hello
SQL4-> Select ID,UID,Tags,Title where Tags=Hello
[MySQL会在内存中加载Text列以进行上述查询吗?]
答案 0 :(得分:1)
简短回答:不。
在MySQL中,TEXT
和BLOB
字段不存储在行中,因此从它们读取需要单独的表查找。
所以没有 MySQL在处理上述查询时不会读取内存中的text
字段
请参阅:http://nicj.net/2011/01/20/mysql-text-vs-varchar-performance
此查询还有另一个问题,它很慢,因为:
TEXT
和BLOB
字段未存储在行中,因此MySQL需要为每个TEXT
字段单独查找。BLOB
或TEXT
字段,因此如果 MySQL需要使用临时表来解析查询,它将存储中间表<强大>在磁盘上放慢速度。 <强>建议强>
不要将tinytext
用于列Author
,Tags
和Title
。使用varchar可以更快地完成这些工作
请注意,text
是保留字,因此您需要将字段名称括在反引号`
中。