Ali*_*Ali 1 mysql indexing database-design query-optimization
我有表包含文本和blob字段和其他一些,我想知道如果使用这些类型的数据会减慢对表的访问速度
CREATE TABLE post
(
id INT(11),
person_id INT(11) ,
title VARCHAR(120) ,
date DATETIME ,
content TEXT,
image BLOB ,
);
Run Code Online (Sandbox Code Playgroud)
假设我有超过100,000个帖子,我想做一些查询
SELECT * FROM post WHERE post.date >= ? AND post.person_id = ?
Run Code Online (Sandbox Code Playgroud)
如果表不包含TEXT和BLOB字段,查询会更快
是还是不是.
如果您不提取text/blob字段,它们不会减慢速度SELECTs.如果你这样做,那么他们会以这两种方式中的一种或两种方式减慢速度:
TEXT和BLOB数据,如果足够大,被存储在从柱的其余部分的单独的区域.这可能需要额外的磁盘命中.(或者,如果已经缓存,则可能不会.)GROUP BY,ORDER BY和子查询.如果要获取文本或blob,则临时表不能MEMORY,但必须更慢MyISAM.INDEX(person_id, date).如果没有它,查询可能会选择收集text/blob(埋在其中*)并将其拖运,只是稍后丢弃它.行动项目:
content为这个查询,请不要使用*.如果你需要TEXT或BLOB使用它; 替代品往往不会更好.在InnoDB的情况下,使用"垂直分区"("分割表",如@changepicture所述)并不是更好.(这对MyISAM来说是一个有用的技巧.)InnoDB实际上是"为你做分裂".