MySQL背后的操作选择SQL

时间:2011-05-12 06:00:33

标签: mysql sql database-design

我有一个具有这种结构的MySQL表

  • ID [pk,MediumInt]
  • UID [MediumInt]
  • 作者[TinyText]
  • TAGS [TinyText]
  • 标题[TinyText]
  • 文字[文字]

当我执行搜索或选择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列以进行上述查询吗?]

1 个答案:

答案 0 :(得分:1)

简短回答:不。

在MySQL中,TEXTBLOB字段存储在行中,因此从它们读取需要单独的表查找。 所以没有 MySQL在处理上述查询时不会读取内存中的text字段 请参阅:http://nicj.net/2011/01/20/mysql-text-vs-varchar-performance

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

  1. TEXTBLOB字段未存储在行中,因此MySQL需要为每个TEXT字段单独查找。
  2. MEMORY引擎不支持BLOBTEXT字段,因此如果 MySQL需要使用临时表来解析查询,它将存储中间表<强大>在磁盘上放慢速度。
  3. <强>建议
    不要将tinytext用于列AuthorTagsTitle。使用varchar可以更快地完成这些工作 请注意,text是保留字,因此您需要将字段名称括在反引号`中。

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