gpt4 book ai didi

mysql - 文本或 blob 字段是否会减慢对表的访问

转载 作者:行者123 更新时间:2023-11-29 03:59:50 25 4
gpt4 key购买 nike

我的表包含文本和 blob 字段以及其他一些,我想知道使用这些类型的数据类型是否会减慢对表的访问速度

CREATE TABLE post 
(
id INT(11),
person_id INT(11) ,
title VARCHAR(120) ,
date DATETIME ,
content TEXT,
image BLOB ,
);

假设我有超过 100,000 个帖子,我想做一些查询,例如

SELECT * FROM post WHERE post.date >= ? AND post.person_id = ?

如果表不包含 TEXT 和 BLOB 字段,查询会更快吗

最佳答案

是或否。

如果您不获取文本/blob 字段,它们不会减慢 SELECTs。如果您这样做,那么他们会通过以下一种或两种方式减慢速度:

  • 在 InnoDB 中,TEXTBLOB 数据如果足够大,将存储在与其余列不同的区域中。这可能需要额外的磁盘命中。 (或者可能不会,如果它已经被缓存。)
  • 在复杂的查询中(比你的更复杂),优化器可能需要创建一个临时表。典型情况:GROUP BYORDER BY和子查询。如果您正在获取文本或 blob,临时表不能是 MEMORY,但必须是较慢的 MyISAM
  • 但是,真正的减速是您可能没有这个复合索引:INDEX(person_id, date)。没有它,查询可能会选择收集文本/blob(埋在 * 中)并将其拖来拖去,只是稍后丢弃它。

行动项目:

  • 确保您拥有该复合索引。
  • 如果 查询不需要内容,请不要使用*

如果您需要TEXTBLOB,请使用它;替代方案往往不会更好。在 InnoDB 的情况下,使用“垂直分区”(“拆分表”,如 @changepicture 所述)并不好。 (这是 MyISAM 的一个有用技巧。)InnoDB 正在有效地“为您进行拆分”。

关于mysql - 文本或 blob 字段是否会减慢对表的访问,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41788933/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com