我有一个具有这种结构的 MySQL 表
- ID [pk, MediumInt]
- UID [MediumInt]
- 作者 [TinyText]
- 标签 [TinyText]
- 标题 [TinyText]
- 文字[文字]
当我执行搜索或选择 ID、UID、标签或所有这 3 个时,MySQL 是否也会在内存中加载文本字段? [我没有在 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 列?]
最佳答案
简短回答:否。
在 MySQL 中,TEXT
和 BLOB
字段不存储在行中,因此读取它们需要单独的表查找。
所以no MySQL在处理上述查询时不会读取内存中的text
字段。
请参阅:http://nicj.net/2011/01/20/mysql-text-vs-varchar-performance
不过,这个查询还有另一个问题,它很慢,因为:
TEXT
和BLOB
字段不存储在行中,因此 MySQL 需要对每个TEXT
字段进行单独查找。<- MEMORY 引擎不支持
BLOB
或TEXT
字段,因此如果 MySQL 需要使用临时表来解析查询,它会将中间表存储在磁盘上,从而减慢速度。
建议
不要将 tinytext
用于 Author
、Tags
和 Title
列。使用 varchar 会更快。
请注意,text
是保留字,因此您需要将字段名称括在反引号 `
中。
关于mysql - MySQL Select SQL 背后的操作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5973911/