例如,我有一个“NAMES”表,其中有一个 Name
类型为 varchar(10)
的列;该表有 500 行。我还有一个“NAME_COLLECTIONS”表,其中有一列长文本类型;在表的单行中,该列包含长度为 5500 的字符串。
SELECT * FROM NAMES WHERE :Name = 'Tom';
的运行速度会比 SELECT * FROM NAME_COLLECTIONS;
慢吗?
增加 NAMES 中的列数与增加 NAME_COLLECTIONS 中单个文本的大小对性能有何影响?
最佳答案
SELECT * FROM NAMES WHERE Name = 'Tom';
假设您在列上有索引(您应该这样做,因为您似乎正在尝试获得最佳性能),这应该会更快。它只需从索引中读取一行,并且该行将占用一页数据。
而长文本
可能跨越多个数据页,并且每次读取姓名列表都将被迫读取整个集合。
如果您想搜索特定名称,我建议您对数据进行正确建模,每个名称一行。并为该列创建索引。
虽然500行对于MySQL来说微不足道。无论如何,它可能适合内存缓冲池中的几页,因此在获得更大的数据集之前,您不应该专注于性能。
顺便说一句,您的语法 WHERE :Name = 'Tom'
不正确。以冒号为前缀的列名似乎是命名参数占位符,而不是列名。参数占位符只能是固定字符串,不能是列名。
关于mysql - 哪个更快 - 从 n 列中获取具有大小 t 的单个值的列,或从 1 列中获取大小为 n*t 的列?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42519588/