mysql - MySQL Select SQL 背后的操作

标签 mysql sql database-design

我有一个具有这种结构的 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 中,TEXTBLOB 字段存储在行中,因此读取它们需要单独的表查找。 所以no MySQL在处理上述查询时不会读取内存中的text字段。
请参阅:http://nicj.net/2011/01/20/mysql-text-vs-varchar-performance

不过,这个查询还有另一个问题,它很慢,因为:

  1. TEXTBLOB 字段不存储在行中,因此 MySQL 需要对每个 TEXT 字段进行单独查找。<
  2. MEMORY 引擎不支持BLOBTEXT 字段,因此如果 MySQL 需要使用临时表来解析查询,它会将中间表存储在磁盘上,从而减慢速度。

建议
不要将 tinytext 用于 AuthorTagsTitle 列。使用 varchar 会更快。
请注意,text 是保留字,因此您需要将字段名称括在反引号 ` 中。

另请参阅:http://dev.mysql.com/doc/refman/5.5/en/blob.html

关于mysql - MySQL Select SQL 背后的操作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5973911/

相关文章:

php - 更改数据库连接以连接到 Wordpress 连接 - 应该很简单吗?

mysql - 如何选择具有相同外部列表(两个表)的记录?

database-design - 如何表示对称的多对多关系

python - 我将如何在我的网站中实现排名算法来对数据库数据进行排序?

php - 编程初学者 - 设计网络应用程序的建议

database - 主键问题

android - 多语言持久性数据库处理

mysql更新查询检查数据是否更新或匹配

mysql - 对非常大的数据集进行分页

php - WordPress pre_get_posts 不工作