mysql - 哪个更快 - 从 n 列中获取具有大小 t 的单个值的列,或从 1 列中获取大小为 n*t 的列?

标签 mysql sql

例如,我有一个“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/

相关文章:

mysql - 如何使用 spring.jpa.hibernate.ddl-auto

sql - Like子句和sql注入(inject)

c# - 如何检查SQL数据库中是否有记录?

mysql - 检索每个用户的最新条目

sql - 带进和不带进的插入语句有什么区别?

java - 从 oracle 数据库获取给定经度和纬度的酒店详细信息

mysql - 在 MySQL Workbench 中运行 sql 脚本

php - VARCHAR 大小限制重要吗?

php - 我可以更新记录(如果存在),如果不存在则将其插入单个查询中的多行吗?

mysql - mysql 更新/设置语句的速度。乘以一列